Nói chung, bạn nên sử dụng Connection.commit()
chứ không phải Connection.setAutoCommit(true)
để thực hiện một giao dịch, trừ khi bạn muốn chuyển từ sử dụng giao dịch sang mô hình 'giao dịch trên mỗi bản sao kê' của AutoCommit.
Điều đó nói rằng, gọi Connection.setAutoCommit(true)
trong khi trong một giao dịch sẽ cam kết giao dịch (nếu trình điều khiển tuân thủ mục 10.1.1 của JDBC 4.1 spec). Nhưng bạn thực sự chỉ nên làm điều đó nếu bạn có ý định ở lại AutoCommit sau đó, vì việc bật / tắt autoCommit trên một kết nối có thể có chi phí cao hơn trên một kết nối so với chỉ cam kết (ví dụ:vì nó cần chuyển đổi giữa các trình quản lý giao dịch, hãy kiểm tra thêm , v.v.).
Bạn cũng nên sử dụng Connection.commit()
và không sử dụng lệnh SQL gốc COMMIT
. Như chi tiết trong tài liệu kết nối:
Vấn đề là các lệnh như commit()
và setAutoCommit(boolean)
có thể thực hiện nhiều công việc hơn ở nền tảng, chẳng hạn như đóng ResultSets
và đóng hoặc đặt lại Statements
. Sử dụng lệnh SQL COMMIT
sẽ bỏ qua điều này và có khả năng đưa trình điều khiển / kết nối của bạn vào trạng thái không chính xác.