2

JDBC はcloseOnAutoCompletionと呼ばれるメソッドを導入しました。これは、依存するすべての resultSet が閉じているときにステートメントを閉じることを示しています。

準備済みステートメントを作成する方法があります

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を使用しています

ありがとう、ムキ

4

2 に答える 2