JDBC引入了一个名为closeOnAutoCompletion的方法,该方法声明当所有相关resultSets都关闭时,它会关闭语句。MySQL JDBC closeOnCompletion对PreparedStatement没有影响
我要创建准备好的语句
public final PreparedStatement statement(Connection connection) throws SQLException {
PreparedStatement stmt = connection.prepareStatement(query, ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY);
stmt.closeOnCompletion();
return stmt;
}
不,我调用此方法如下
@Test
public void testCloseOnCompletionSemiManually() throws SQLException {
PreparedStatement stmt = shards.statement(db);
assertTrue("Statement must be closeOnAutoCompletion", stmt.isCloseOnCompletion());
try (ResultSet rs = stmt.executeQuery()) {
while (rs.next()) {
//System.out.println("Shard id: " + rs.getInt("SHARD_ID"));
}
}
assertTrue("Statement must be closed after all results sets have been processed", stmt.isClosed());
}
最后支票的声明未关闭失败的方法。
由于mysql的实现,这是一个问题吗?或者我误解了JavaDoc。
更新:我使用的版本5.1.24
感谢, 缪奇
也许关闭是异步的?退出try子句后尝试睡眠一段时间。如果它没有帮助你发现自己的bug :) – 2013-04-10 10:36:01
这是完全可能的MySQL驱动程序还没有实现这一点呢。 – 2013-04-10 10:44:02
确实是非常新的实现。但是我想在打开一个bug之前检查我是否做错了什么 – Muki 2013-04-10 10:54:24