我正在使用 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 的查询?
最佳答案
请勿在插入中包含主键列。
此外,不要每次都准备声明。只需执行一次即可。
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 值.
关于java - 带有自动增量的 JDBC 插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54113810/