使用Java进行多个SQL查询(效率)

时间:2012-07-11 16:15:14

标签: java sql database jdbc

我有一个连接到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知识非常基础。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

尝试使用Google的“java executebatch示例”作为示例。

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