gpt4 book ai didi

java - Java中批量插入不自动递增

转载 作者:行者123 更新时间:2023-12-02 10:49:41 24 4
gpt4 key购买 nike

所以我最近开始阅读有关 sql 最佳实践的文章,并发现了如何使用批处理语句进行插入和更新。所以想用我新学到的知识更新一些代码。例如我有一个像这样的循环:

conn.setAutoCommit(false)

try {
stmt = conn.prepareStatement("insert into TEST (ID,STR_TEST1) values (?,?)")

for (String element : someList) {
stmt.setInt(1, ???)
stmt.setString(2, element)
}
stmt.executeBatch();
conn.commit()
} finally {
stmt.close()
}

现在不幸的是,我的表不会自动递增 id,并且由于某些原因我无法更改它,这意味着我必须始终选择表中的下一个“免费”id。问题是,它不起作用,我猜是因为自动提交设置为 false。有什么想法可以解决我的问题吗?我考虑过在插入查询中进行子选择,但我担心这会削弱性能。

最佳答案

序列是生成唯一数字的最安全、最快的方法(PostgreSQL 的“自动增量”类型 serialidentity 在后台使用它)。

要使用它,create one first :

create sequence test_id_seq;

如果目标表中已有行,请调整序列以返回大于当前最大值的值:

select setval('test_id_seq', (select max(id) from test));

然后在 INSERT 语句中使用 nextval('test_id_seq') 而不是提供值:

try {
stmt = conn.prepareStatement(
"insert into TEST (ID,STR_TEST1) values (setval('test_id_seq'),?)")

for (String element : someList) {
stmt.setString(1, element)
}
stmt.executeBatch();
conn.commit()
} finally {
stmt.close()
}

关于java - Java中批量插入不自动递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52274409/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com