Като цяло трябва да използвате Connection.commit()
а не Connection.setAutoCommit(true)
за извършване на транзакция, освен ако не искате да преминете от използване на транзакция към модела „транзакция на изявление“ на autoCommit.
Това каза, извикване на Connection.setAutoCommit(true)
докато в транзакция ще извърши транзакцията (ако драйверът е в съответствие с раздел 10.1.1 от спецификацията JDBC 4.1). Но наистина трябва да правите това само ако искате да останете в autoCommit след това, тъй като разрешаването/деактивирането на autoCommit за връзка може да има по-високи разходи за връзка, отколкото простото извършване (напр. тъй като трябва да превключва между мениджъри на транзакции, направете допълнителни проверки и др.).
Трябва също да използвате Connection.commit()
и не използвайте собствената SQL команда COMMIT
. Както е описано подробно в документацията за свързване:
Работата е там, че команди като commit()
и setAutoCommit(boolean)
може да свърши повече работа във фонов режим, като затваряне на ResultSets
и затваряне или нулиране на Statements
. Използване на SQL командата COMMIT
ще заобиколи това и потенциално ще доведе вашия драйвер/връзка в неправилно състояние.