TRUNCATE
là một lệnh Ngôn ngữ Định nghĩa Dữ liệu (DDL) cam kết ngầm. Nó sẽ không vi phạm bất cứ điều gì, nếu bạn sử dụng DELETE
thay vào đó là tuyên bố.
// Deletes ALL Rows; No WHERE Clause
pstmnt.executeQuery("DELETE FROM bd_vehicles_temp_");
Lý do TRUNCATE
là một câu lệnh DDL là nó loại bỏ dữ liệu bảng trực tiếp mà không cần sao chép nó vào Không gian bảng khôi phục . Đó là lý do tại sao TRUNCATE
nhanh hơn nhưng không thể quay lại.
CHỈNH SỬA :(Tại sao INSERT của tôi cũng đang cam kết?)
Đó là vì bạn đang đóng Kết nối mà không gọi Kết nối # rollback () .
Nếu một Kết nối bị đóng mà không có cam kết rõ ràng hoặc khôi phục ; JDBC không bắt buộc bất cứ điều gì cụ thể ở đây và do đó hành vi phụ thuộc vào nhà cung cấp cơ sở dữ liệu. Trong trường hợp của Oracle, một cam kết không liên quan được phát hành.
VẬY, chỉ cần rollback()
các thay đổi của bạn trước khi đóng Kết nối trong cuối cùng khối
pstmnt = conn.createStatement();
pstmnt.executeQuery("DELETE FROM bd_vehicles_temp_1");
System.out.println("Query Executed");
conn.rollback();
System.out.println("Changes rolled back");