Generalnie powinieneś używać Connection.commit()
a nie Connection.setAutoCommit(true)
zatwierdzić transakcję, chyba że chcesz przełączyć się z korzystania z transakcji na model „transakcja na wyciąg” w autocommit.
To powiedziawszy, wywołując Connection.setAutoCommit(true)
podczas trwania transakcji zatwierdzi transakcję (jeśli sterownik jest zgodny z sekcją 10.1.1 specyfikacji JDBC 4.1). Ale naprawdę powinieneś to robić tylko wtedy, gdy chcesz pozostać w trybie autoCommit po tym, ponieważ włączenie / wyłączenie funkcji autoCommit w połączeniu może mieć większe obciążenie dla połączenia niż zwykłe zatwierdzanie (np. ponieważ musi przełączać się między menedżerami transakcji, wykonaj dodatkowe kontrole itp.).
Powinieneś także użyć Connection.commit()
i nie używaj natywnego polecenia SQL COMMIT
. Jak wyszczególniono w dokumentacji podłączenia:
Chodzi o to, że polecenia takie jak commit()
i setAutoCommit(boolean)
może wykonać więcej pracy w tle, na przykład zamknąć ResultSets
i zamykanie lub resetowanie Statements
. Użycie polecenia SQL COMMIT
ominie to i potencjalnie doprowadzi twój sterownik / połączenie do nieprawidłowego stanu.