0

我使用 for 循环在 MySQL 数据库中进行了一些插入操作。

我的自动增量有问题,因为在第一次插入后我获得了 com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException。

这里的代码:

for (int i=0; i<numKeys; i++) {
try {
   stm1 = this.db_connection.prepareStatement("INSERT INTO mytable (Cod, Prop, Field, Value) VALUES (?,?,?,?)");
   stm1.setInt(1, Statement.RETURN_GENERATED_KEYS);
   stm1.setInt(2, 0);
   stm1.setString(3, aname);  
   stm1.setString(4, avalue);
       stm1.executeUpdate();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}  

Cod 是一个自动增量字段。

4

3 回答 3

2

如果它是一个自动递增的字段,则没有理由将其作为参数传递,只是不要将其包含在 Insert 语句中。

stm1 = this.db_connection.prepareStatement("INSERT INTO mytable (Prop, Field, Value) VALUES (?,?,?)");

并删除下面适当的 setInt 方法。

于 2012-07-05T09:04:36.933 回答
1

Statement.RETURN_GENERATED_KEYS是一个 int 常量,

如果您尝试使用相同的主键多次添加它,它将无法添加

于 2012-07-05T09:04:40.500 回答
0

如果 Cod 是自动增量的,则不需要插入它。您应该尝试以下代码。

for (int i=0; i<numKeys; i++) {
try {
   stm1 = this.db_connection.prepareStatement("INSERT INTO mytable (Prop, Field, Value) VALUES (?,?,?)");
   stm1.setInt(1, 0);
   stm1.setString(2, aname);  
   stm1.setString(3, avalue);
   stm1.executeUpdate();
} catch (SQLException e) {
    e.printStackTrace();
}

}

于 2012-07-05T09:04:37.410 回答