【发布时间】:2015-01-09 06:29:42
【问题描述】:
代码应该是独立于数据库的,所以我使用的是普通的 sql。
我的查询可以在运行时更改,例如 table1 更改为 table2。 但是假设对于 table1 查询,我必须更新 2000 条记录,其中插槽为 50,这意味着一旦处理了 50 条记录,我就会提交。
我有两种方法可以在 sql 语句的 IN 子句中设置值。
我想知道下面哪个代码效率更高(priority is optimization and maintainability is secondary)?
PreparedStatement preparedStatement = sqlObj.prepareStatement(
"UPDATE table1 column1=? WHERE table_id IN (" + StringUtils.repeat("?,", paramArray.length-1)+ "?)");
preparedStatement.setInt(1, 0);
for(int idx = 0; idx < paramArray.length; idx++) {
preparedStatement.setInt(idx+2, paramArray[idx]);
}
preparedStatement.executeQuery();
或者
PreparedStatement preparedStatement = sqlObj.prepareStatement(
"UPDATE table1 column1=? WHERE table_id IN (?)");
for(int idx = 0; idx < paramArray.length; idx++) {
preparedStatement.setInt(1, 0);
preparedStatement.setInt(2, paramArray[idx]);
preparedStatement.addBatch();
}
preparedStatement.executeBatch();
编辑:
假设param.length is 50 和整个代码exectutes 40 times 即处理2000 records。
所以在第一种情况下它会附加 50 ?然后为他们设置变量进行一个更新查询,在第二种情况下,它将创建一批 50 个更新查询。
【问题讨论】:
-
如果您只调用一次或很少调用代码,那么第一个。否则,这取决于您进行相同更新的频率、每次包含多少参数以及数据库的语句缓存。
-
我已经更新了我的问题。
标签: java sql prepared-statement