具有自动增量功能的JDBC插入

时间:2019-01-09 15:52:48

标签: java mysql sql jdbc

我正在使用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执行查询?

2 个答案:

答案 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值。