java - 带有自动增量的 JDBC 插入

标签 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 的查询?

最佳答案

请勿在插入中包含主键列。

此外,不要每次都准备声明。只需执行一次即可。

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/

相关文章:

mysql - 无法再在 DirectAdmin 中启动 MySQL

php - "More"按钮使用 AJAX 和 PHP

sql - GROUP BY 是如何工作的?

java - session 是如何处理的?

java - 通知数据集更改不起作用。当我收到短信时ListView没有更新

php - 不重复地从MySQL表中选择

sql - 如何清理nodejs中的输入以防止sql注入(inject)?

mysql - 删除记录中除最后 7 个字符以外的所有内容

java - ADB shell 获取 Toast 消息

java - 有没有办法为 JUnit 测试用例在内存中运行 MySQL?