Cla*_*ara 15 java sql jdbc prepared-statement
我有以下代码片段:
PreparedStatement preparedStatement = connection.prepareStatement(sql);
for (int i = 0; i < 100000; i++) {
preparedStatement.setObject(1, someValue);
preparedStatement.addBatch();
if ((i + 1) % 100 == 0) {
preparedStatement.executeBatch();
}
}
Run Code Online (Sandbox Code Playgroud)
所以我想用不同的值执行一次大约10万次的命令.我的问题是:每次调用executeBatch()后,PreparedStatement中的参数是清除的还是我必须在调用executeBatch()之后显式调用preparedStatement.clearParameters()以确保只执行最后100个命令?
Bog*_*mac 14
是.根据JDBC 3.0的第15.1.2 节和JDBC 4.1的第14.1.2节:
调用executeBatch方法会关闭调用Statement对象的当前结果集(如果有的话).一旦executeBatch返回,语句的批处理将重置为空.
不幸的是,这样一个重要的细节几乎就像一个精美的印刷品.
除了已经提到的示例之外,jtds驱动程序还在executeBatch()的finally块中执行clearBatch().
我想说更相关的问题是批次是否被清除.虽然这似乎是一个合理的假设,但是除非文档明确说它已被清除(并且我没有看到任何executeBatch说法),我clearBatch明确地使用理论,如果实现确实清除了批处理,clearBatch将会很快无操作; 如果不是,那么我需要这样做.
更新:虽然executeBatch文档没有这样说,但请参阅Bogdan Calmac的回答:显然,JDBC文档确实说成功完成会清除批处理.
我在这里可以看到:http://javasourcecode.org/html/open-source/jdk/jdk-6u23/sun/jdbc/odbc/JdbcOdbcStatement.java.html
executeBatch()电话clearBatch()到底.
但是不能保证在其他实现中完全相同.
| 归档时间: |
|
| 查看次数: |
8873 次 |
| 最近记录: |