【发布时间】:2013-04-10 10:20:00
【问题描述】:
JDBC 引入了一个名为 closeOnAutoCompletion 的方法,它声明当所有依赖的结果集都关闭时,它会关闭语句。
我有一个方法来创建准备好的语句
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 子句后尝试睡眠一段时间。如果它没有帮助您发现自己的错误:)
-
完全有可能是MySQL驱动还没有实现这个。
-
确实是非常新的实现。但是我想在打开错误之前检查我是否做错了
-
我打开了一个错误bugs.mysql.com/bug.php?id=68916 实现看起来更像一个占位符(StatementImpl Line 3041)
标签: java mysql jdbc prepared-statement