带有Statement.RETURN_GENERATED_KEYS的MySQL批处理stmt

时间:2011-11-16 19:00:35

标签: 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()与预处理语句一起使用。

1 个答案:

答案 0 :(得分:2)

我不确定这是否可以通过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);

希望这有帮助。