JDBC ввел метод, называемый closeOnAutoCompletion, в котором говорится, что он закрывает инструкцию, когда все зависимые результирующие наборы близки.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.
Update: Я использую версию 5.1.24
спасибо, MUKI
Возможно, закрытие асинхронно? Попробуйте спать некоторое время после выхода из условия try. Если это не поможет вам найти ошибку :) –
Это вполне возможно, что драйвер MySQL еще не реализовал это. –
Это правда, что реализация очень новая. Однако я хочу проверить, что я делаю что-то не так, прежде чем открывать ошибку – Muki