Jeśli chcesz wykonać wiele instrukcji niepodzielnie, musisz użyć transakcji. Połączenie JDBC domyślnie działa w trybie „automatycznego zatwierdzania”, co oznacza, że każda instrukcja jest wykonywana we własnej transakcji. Więc najpierw musisz wyłączyć tryb automatycznego zatwierdzania, używając Connection.setAutoCommit(false)
.
Przy wyłączonym trybie auto-commit wykonane wyciągi zostaną wykonane w bieżącej transakcji, jeśli nie ma bieżącej transakcji, zostanie uruchomiona. Tę transakcję można następnie zatwierdzić za pomocą Connection.commit()
lub wycofane za pomocą Connection.rollback()
.
Musisz zrobić coś takiego:
try (Connection connection = DriverManager.getConnection(...)) {
connection.setAutoCommit(false);
try (Statement stmt = connection.createStatement()) {
stmt.executeUpdate(<your first update>);
stmt.executeUpdate(<your second update>);
connection.commit();
} catch (SQLException e) {
connection.rollback();
throw e;
}
}
Więcej informacji znajdziesz w samouczku JDBC Korzystanie z transakcji .
I proszę zapoznać się z przygotowanymi oświadczeniami. Łączenie wartości w ciągu zapytania jest złe, ponieważ może prowadzić do wstrzyknięcia SQL lub dziwnych błędów, jeśli zapomnisz o ucieczce wartości. Zobacz także rozdział samouczka JDBC Korzystanie z przygotowanych instrukcji .