![](/img/trans.png)
[英]closeOnCompletion doesn't work properly in MySQL JDBC 5.1.32
[英]MySQL JDBC closeOnCompletion has no effect on PreparedStatement
JDBC引入了一個名為closeOnAutoCompletion的方法,該方法聲明當所有相關的resultSets關閉時,它關閉該語句。
我有一種創建准備好的語句的方法
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
謝謝,Muki
驅動程序尚不支持,但是測試也不正確。 請注意,Statement的API文檔說,當所有從屬結果集都關閉時,closeOnCompletion()會關閉該語句,而不是滾動到末尾,因此我不確定在您的情況下實際上假定發生了什么行為。
根據此公告 ,MySQL Connector / J的5.1.21版本(MySQL的JDBC驅動程序的正式名稱)應支持closeOnAutoCompletion 。 您可以檢查您是否正在使用該版本?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.