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