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を使用しています
ありがとう、ムキ