Nếu bạn muốn thực hiện nhiều câu lệnh nguyên tử, bạn cần sử dụng một giao dịch. Kết nối JDBC được mặc định ở chế độ 'tự động cam kết', có nghĩa là mỗi câu lệnh được thực thi trong giao dịch của chính nó. Vì vậy, trước tiên bạn cần tắt chế độ tự động cam kết bằng cách sử dụng Connection.setAutoCommit(false)
.
Với chế độ cam kết tự động bị vô hiệu hóa, các câu lệnh đã thực thi sẽ được thực hiện trong giao dịch hiện tại, nếu không có giao dịch hiện tại, một câu lệnh sẽ được bắt đầu. Sau đó, giao dịch này có thể được cam kết bằng cách sử dụng Connection.commit()
hoặc khôi phục bằng cách sử dụng Connection.rollback()
.
Bạn sẽ cần thực hiện một số việc như:
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;
}
}
Để biết thêm chi tiết, hãy xem chương hướng dẫn JDBC Sử dụng giao dịch .
Và vui lòng tìm hiểu về các tuyên bố đã chuẩn bị. Việc nối các giá trị thành một chuỗi truy vấn là không tốt, vì nó có thể dẫn đến việc đưa vào SQL hoặc các lỗi kỳ lạ nếu bạn quên thoát các giá trị. Xem thêm chương hướng dẫn JDBC Sử dụng câu lệnh chuẩn bị .