0

我正在尝试通过java.sql准备好的语句批处理执行创建多个表(最多 20 个)。大多数表都是相互关联的。但是我心里有些疑惑。

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

4

2 回答 2

0

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

  1. 调用 Connection.setAutoCommit(false)
  2. 使用 Statement.executeUpdate 执行您的创建表语句
  3. 调用 Connection.commit()

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

于 2013-01-11T09:05:56.503 回答
0

The behavior of batch execution with auto commit on is implementation defined, some drivers may not even support that. So if you want to use batch execution, set auto commit to false.

That said, some databases implicitly commit each DDL statement; this might interfere with correct working of batched execution. I would advise to take the safe route and not use batched execution for DDL, but to use a normal Statement and execute(String) for executing DDL.

于 2013-01-11T08:07:56.347 回答