簡體   English   中英

MySQL JDBC closeOnCompletion對PreparedStatement不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM