我想通过java.sql
准备好的语句批量执行创建多个表(最多20个)。大多数表格都与彼此相关。但我脑海中有些混乱。批准备语句自动提交
1)设置连接自动提交真或假? 2)有没有BatchExecute的特殊模式?喜欢下来。我想要父表创建查询必须先执行。 3)如果错误发生,所有批次都回滚?
我想通过java.sql
准备好的语句批量执行创建多个表(最多20个)。大多数表格都与彼此相关。但我脑海中有些混乱。批准备语句自动提交
1)设置连接自动提交真或假? 2)有没有BatchExecute的特殊模式?喜欢下来。我想要父表创建查询必须先执行。 3)如果错误发生,所有批次都回滚?
带有自动提交的批量执行行为是实现定义的,有些驱动程序甚至可能不支持该行为。所以如果你想使用批处理执行,请将auto commit设置为false。
也就是说,有些数据库隐式地提交每个DDL语句;这可能会影响批处理执行的正确工作。我建议采取安全路线,不要使用DDL的批处理执行,而是使用正常的Statement
和execute(String)
来执行DDL。
实际上在这种情况下使用批处理执行没有多大意义。一次插入或更新数千行时,批处理执行会为您提供(大)性能改进。 你只需要拥有一个事务中的所有您的语句:
您需要根据它们之间的外键自己订购create-table语句。 正如Mark指出的那样,您正在使用的数据库可能会立即提交每个创建表并忽略该事务。并非所有DB都支持表的事务性创建。你需要测试这个或者在这方面做更多的研究。
这是我的理解,并不是所有的RDBMS数据定义语言都可以在一个事务中执行。 –
这似乎是一件好奇的事情。如果你想让他们都回到角色,那么你应该将autocommit设置为false。但是像这样搞乱数据库目录会导致问题。 – BevynQ
所以任何更好的方式来创建表。请给我建议。 –