在 Java 中进行不自动增量的批量插入

所以我最近开始阅读有关 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。任何想法如何解决我的问题?我想在我的插入查询中进行子选择,但我担心这会削弱性能。


HUH函数
浏览 173回答 1
1回答

红颜莎娜

序列是生成唯一数字的最安全和最快的方式(PostgreSQL 的“自动增量”类型serial或identity在后台使用它)。要使用它,请先创建一个: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()}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java