我正在使用Java中的MySQL库执行查询。
在我的数据库结构中,有一列称为cod_nfs
(主键,不是null和auto_increment)。
通常,在每个插入查询中,我都将值设置为null
,并且在执行查询后,它会增加最后一个ID,但在Java中这样做会给我例外。
那是代码:
String SQL = "INSERT INTO infosetdata(cod_nfs,savingDate_nfs,attributeValue_nfs,codInfoSet_nfs,codColumn_nfs,codRow_nfs) VALUES (null,'2019-01-08',?,?,?,?)";
for( String value : values ) {
ps = conn.prepareStatement(SQL);
ps.setString(1, value);
ps.setInt(2, dataId);
ps.setInt(3, y);
ps.setInt(4, x);
ps.executeUpdate();
y++;
}
如何使用自动增量ID执行查询?
答案 0 :(得分:1)
您不应为cod_nfs设置值,因为它已被设置为自动增量。请尝试以下:
String SQL = "INSERT INTO infosetdata(savingDate_nfs,attributeValue_nfs,codInfoSet_nfs,codColumn_nfs,codRow_nfs) VALUES ('2019-01-08',?,?,?,?)
如果出现错误,请确保将cod_nfs列设置为自动增量。尝试运行:
ALTER TABLE infosetdata MODIFY cod_nfs INT(11) NOT NULL AUTO_INCREMENT
感谢@Mark Rotteveel在评论中帮助解决该问题。
答案 1 :(得分:0)
请勿在插入内容中包含主键列。
也不要每次都准备语句。只需做一次。
String SQL = "INSERT INTO infosetdata (savingDate_nfs,attributeValue_nfs,codInfoSet_nfs,codColumn_nfs,codRow_nfs) "
+ "VALUES ('2019-01-08',?,?,?,?)";
ps = conn.prepareStatement(SQL);
for( String value : values ) {
ps.setString(1, value);
ps.setInt(2, dataId);
ps.setInt(3, y);
ps.setInt(4, x);
ps.executeUpdate();
ResultSet rs = ps.getGeneratedKeys();
if (rs.next()) {
int pk = rs.getInt(1);
System.out.println("Generated PK = " + pk);
}
y++;
}
如您所见,您可以使用PreparedStatement.getGeneratedKeys()恢复生成的PK值。