批量准备语句自动提交

时间:2013-01-11 02:50:07

标签: java jdbc prepared-statement

我试图通过java.sql预处理语句批量执行创建多个表(最多20个)。大多数表都是相互关联的。但是我脑子里有一些混乱。

1)设置连接自动提交true还是false? 2)BatchExecute是否有任何特殊模式。喜欢上来。我想要父表创建查询必须先执行。 3)如果错误发生,则所有批次都回滚?

2 个答案:

答案 0 :(得分:0)

使用自动提交执行批处理的行为是实现定义的,某些驱动程序甚至可能不支持。因此,如果要使用批处理执行,请将auto commit设置为false。

也就是说,一些数据库隐式提交每个DDL语句;这可能会干扰批量执行的正确工作。我建议采取安全路由,不要使用批量执行DDL,而是使用普通Statementexecute(String)来执行DDL。

答案 1 :(得分:0)

实际上在这种情况下使用批量执行没有多大意义。批量执行可在一次插入或更新数千行时提高(大)性能。 您只需要在事务中包含所有语句:

  1. 调用Connection.setAutoCommit(false)
  2. 使用Statement.executeUpdate执行您的create-table语句
  3. 致电Connection.commit()
  4. 您需要根据它们之间的外键自己订购create-table语句。 正如Mark指出的那样,您正在使用的数据库可能会立即提交每个create-table并忽略该事务。并非所有DB都支持事务创建表。您需要对此进行测试或对此进行更多研究。