当前位置: 首页 > 知识库问答 >
问题:

带自动增量的JDBC插入

姬心思
2023-03-14

我正在使用java中的MySQL库执行一个查询。在我的数据库结构中,有一列名为cod\u nfs(主键,非空且自动递增)。通常在每次插入查询中,我都将值设置为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个答案

张敏达
2023-03-14

不要在插入中包含主键列。

另外,不要每次都准备陈述。就做一次。

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恢复生成的PK值。getGeneratedKeys()。

白嘉石
2023-03-14

您不应该为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在评论中就此问题提供帮助。

 类似资料:
  • 但会导致以下错误消息: 行2,列1(id)的大容量加载数据转换错误(类型不匹配或指定代码格式的字符无效)。

  • 我有一个表,我试图插入新行,但有一个列不会自动递增自己。有没有办法编写一个INSERT命令,根据列中的最高值自动递增该列?

  • 我正在尝试使用jdbc将数据插入另一个表中的一个表,该表的snowflake中有自动递增列。我跳过了auto increment列,并从下面的查询中只插入了必需的列 它以正确的自动递增顺序正确插入数据,但如果我插入另一个值,自动递增值的值会随机递增 它反映了这个问题, 本期共有260张唱片。这是自动递增键的问题,请帮助。谢谢 另外,如果col1不是主键,并且在snowflake控制台上执行查询,也

  • 问题内容: 我正在寻找这样的查询: id | int | 自动增量 varchar | 255 这样桌子就看起来像 1 | val1 2 | val2 3 | val3 … 除了id总是以每一行都结束而已。 我怎样才能做到这一点? 问题答案:

  • 问题内容: 我生成一个SQLite表(在Java中): 之后,我尝试使用INSERT命令添加行: 我得到错误: 我以为行ID会自动生成,但似乎我什么都没想。 我尝试了另一种解决方案: 结果,我在“ prep.setInt(1,n);”处收到一个空指针异常。 看到故障了吗? 问题答案: 您是否尝试指出要传递的参数应该与表的哪些字段相关? 在您的情况下,可能类似于:

  • 我获取错误 我已经尝试在。txt文件的每行末尾添加逗号,我还尝试在每行末尾添加''。有什么建议吗?