java - 带有 Statement.RETURN_GENERATED_KEYS 的 MySQL 批处理 stmt

标签 java mysql jdbc

我想批量执行 2 条 sql 语句。第一个语句是一个插入,它使用自动生成的值作为其 ID。第二条语句是对另一个表的插入,但它需要使用上面自动生成的值作为插入值的一部分

类似的东西(其中 id 只是为了显示它未在 sql 中定义的自动生成的字段

stmt.addbatch(insert into table1("id_auto_generated", "foo"));
stmt.addbatch(insert into table2("table1_id", "boo"));

我现在的做法是在我的第二个 sql 中使用它

insert into table2(LAST_INSERT_ID(), "boo");

问题是即使在批处理语句中它也很慢,因为我的批处理可能有 50,000 个插入。

我想切换到准备好的语句,但不知道如何将 Statement.RETURN_GENERATED_KEYS 或 LAST_INSERT_ID() 与准备好的语句一起使用。

最佳答案

我不确定这是不是您可以使用 addBatch 执行此操作的方法,除了您使用的方式。另一件事是放弃 addBatch() 方法并尝试关闭自动提交。然后您可以使用 stmt.getGeneratedKeys();。像这样的东西:

connection.setAutoCommit(false);
stmt.executeUpdate("insert into table1(\"id_auto_generated\", \"foo\") ...");
DatabaseResults results = stmt.getGeneratedKeys();
// extract the id from the results
stmt.executeUpdate("insert into table2(\"table1_id\", \"boo\") ...");
... many more stmts here
connection.commit();
connection.setAutoCommit(true);

希望这对您有所帮助。

关于java - 带有 Statement.RETURN_GENERATED_KEYS 的 MySQL 批处理 stmt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8157139/

相关文章:

java - 使用 IBM WAS ConnectionFactory 和 Spring 时出错

java - JMS - 即使与远程提供程序的连接正常,也无法创建 session 工厂

java - 查找内存有限的重复元素

mysql - 将外键添加到现有表

java - 哪个第 3 方 Oracle 数据库 JDBC 驱动程序?

java - 什么是 NullPointerException,我该如何解决?

java - 最新的 c3p0 出现明显的死锁

mysql - 从同一表的其他列更新 mysql 列字段值

java - 我可以动态更改 org.apache.tomcat.jdbc.pool.DataSource 的 maxActive 属性吗?

postgresql - 无法使用 IntelliJ IDEA 的 ssl 连接到 Postgresql