2

我有一个连接到 SQL Server 2008 数据库并执行修改的 Java 程序。如果我要修改一百万条记录,那么执行以下操作是不好的做法:

for(all of the records I need to modify) {
    PreparedStatement pst = conn.prepareStatement(someQuery);
    // set record specific parameters for pst
    // execute pst
}

或者我应该构建一个查询并执行它?它会有所作为吗?它是否取决于它是 UPDATE、INSERT 还是 DELETE?我的 SQL 知识非常基础。

4

2 回答 2

1

如果所有迭代的查询都相同,请在迭代之前创建,并按照建议PreparedStatement在迭代调用结束时创建。PreparedStatemetn.executeBatch()Jesse Webb

我建议在几次迭代后提交您的事务(可能是在每 1000 次迭代之后),因为在不提交事务的情况下更新或删除记录时,变异记录会被锁定,这可能会给数据库的其他用户带来问题(如果您不是这些数据库对象的唯一客户!)。

于 2012-07-11T16:41:14.603 回答
0

对于大量更新,最好使用Statement.executeBatch().

尝试用 Google 搜索“java executebatch 示例”作为示例。

您很可能还希望确保正确使用事务,查询的许多开销来自隐式事务(每个查询一个),其中对许多语句使用单个事务可能会更有效。

于 2012-07-11T16:24:55.053 回答