2012-07-05 623 views
0

我在一个MySQL数据库中使用for循环做了一些插入操作。Java和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(); 
    } 
} 

鳕鱼是一种自动递增场。

回答

2

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

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

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

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(); 
} 

}

+1

我不认为这会工作,您正在将不同数量的参数传递给sql语句中的值。请参阅下面的答案。为了澄清,你需要删除其中的一个?在你的sql语句的值部分,因此只有3个。 – 2012-07-05 09:07:07

+0

@JonTaylor是我的错! Thnks! – sergiofbsilva 2012-07-05 09:11:21

1

Statement.RETURN_GENERATED_KEYS是INT常数,

如果你尝试添加它的多个时间相同的主键,将无法添加

+0

那么,事实上它是一个自动增量字段,所以他真的不应该自己设置它的值。 – 2012-07-05 09:05:37