我正在使用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执行查询?
不要在插入中包含主键列。
另外,不要每次都准备陈述。就做一次。
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()。
您不应该为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)的大容量加载数据转换错误(类型不匹配或指定代码格式的字符无效)。
我正在尝试使用jdbc将数据插入另一个表中的一个表,该表的snowflake中有自动递增列。我跳过了auto increment列,并从下面的查询中只插入了必需的列 它以正确的自动递增顺序正确插入数据,但如果我插入另一个值,自动递增值的值会随机递增 它反映了这个问题, 本期共有260张唱片。这是自动递增键的问题,请帮助。谢谢 另外,如果col1不是主键,并且在snowflake控制台上执行查询,也
我有一个表,我试图插入新行,但有一个列不会自动递增自己。有没有办法编写一个INSERT命令,根据列中的最高值自动递增该列?
问题内容: 我正在寻找这样的查询: id | int | 自动增量 varchar | 255 这样桌子就看起来像 1 | val1 2 | val2 3 | val3 … 除了id总是以每一行都结束而已。 我怎样才能做到这一点? 问题答案:
问题内容: 我生成一个SQLite表(在Java中): 之后,我尝试使用INSERT命令添加行: 我得到错误: 我以为行ID会自动生成,但似乎我什么都没想。 我尝试了另一种解决方案: 结果,我在“ prep.setInt(1,n);”处收到一个空指针异常。 看到故障了吗? 问题答案: 您是否尝试指出要传递的参数应该与表的哪些字段相关? 在您的情况下,可能类似于:
我获取错误 我已经尝试在。txt文件的每行末尾添加逗号,我还尝试在每行末尾添加''。有什么建议吗?