【问题标题】:java.sql.SQLIntegrityConstraintViolationException: ORA-00001java.sql.SQLIntegrityConstraintViolationException: ORA-00001
【发布时间】:2021-05-27 23:23:28
【问题描述】:

下面是我用来向表中插入记录的 java 代码的一部分。

public void insertitem(long item_id, long user_id) throws SQLException
   {
     PreparedStatement pstmt = null;
      StringBuffer sqlB = new StringBuffer();


      sqlB.append("INSERT INTO ITEMS ");
      sqlB.append("(AIR_ID, ACT_ITEM_ID, USER_ID) ");
      sqlB.append("  VALUES ");
      sqlB.append("(ITEMS_SEQ.nextval,?,?) ");
      try
      {
         pstmt = conn.prepareStatement(sqlB.toString());
         int i=1;
         pstmt.setLong(i, item_id);i++;
         pstmt.setLong(i, user_id);i++;
         pstmt.executeUpdate();

      }
      catch(SQLException e)
      {
         throw new SQLException(e.getMessage());
      }
}

即使我使用 SEQ.nextval,它仍然会抛出以下错误:

java.sql.SQLIntegrityConstraintViolationException:ORA-00001:违反了唯一约束 (ACTTRK.AIR_ID_PK)。**

我该如何解决这个问题?

【问题讨论】:

  • 您是在暗示AIR_ID 列是数据库表ITEMS 的主键吗?
  • 在我看来你必须根据表中的 max(air_id) 调整序列的当前值
  • 有一个表定义来处理这个问题。生成
  • @Turo 如何将序列设置为 max(AIR_ID)
  • @Abra 是的,AIR_ID 是表 ITEMS 的主键

标签: java sql oracle oracle-sqldeveloper nextval


【解决方案1】:

设置当前序列值
alter sequence ITEMS_SEQ restart start with <your_max_value+1>;  

如果这不起作用

ALTER SEQUENCE ITEMS_SEQ INCREMENT BY <your_max_value>;

select ITEMS_SEQ.nextval from dual;

ALTER SEQUENCE ITEMS_SEQ INCREMENT BY 1;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-06
    相关资源
    最近更新 更多