2013-01-11 94 views
0

我想通过java.sql准备好的语句批量执行创建多个表(最多20个)。大多数表格都与彼此相关。但我脑海中有些混乱。批准备语句自动提交

1)设置连接自动提交真或假? 2)有没有BatchExecute的特殊模式?喜欢下来。我想要父表创建查询必须先执行。 3)如果错误发生,所有批次都回滚?

+0

这是我的理解,并不是所有的RDBMS数据定义语言都可以在一个事务中执行。 –

+1

这似乎是一件好奇的事情。如果你想让他们都回到角色,那么你应该将autocommit设置为false。但是像这样搞乱数据库目录会导致问题。 – BevynQ

+0

所以任何更好的方式来创建表。请给我建议。 –

回答

0

带有自动提交的批量执行行为是实现定义的,有些驱动程序甚至可能不支持该行为。所以如果你想使用批处理执行,请将auto commit设置为false。

也就是说,有些数据库隐式地提交每个DDL语句;这可能会影响批处理执行的正确工作。我建议采取安全路线,不要使用DDL的批处理执行,而是使用正常的Statementexecute(String)来执行DDL。

0

实际上在这种情况下使用批处理执行没有多大意义。一次插入或更新数千行时,批处理执行会为您提供(大)性能改进。 你只需要拥有一个事务中的所有您的语句:

  1. 呼叫Connection.setAutoCommit(假)
  2. 执行你创建表的语句用的Statement.executeUpdate
  3. 调用Connection.commit()

您需要根据它们之间的外键自己订购create-table语句。 正如Mark指出的那样,您正在使用的数据库可能会立即提交每个创建表并忽略该事务。并非所有DB都支持表的事务性创建。你需要测试这个或者在这方面做更多的研究。