Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

JDBC và Oracle conn.commit và conn.setAutocommit không hoạt động bình thường

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");


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Xác định xem có tồn tại ít nhất một hàng với điều kiện đã cho hay không

  2. Đồng bộ cơ sở dữ liệu Oracle với SQL Azure

  3. Trích xuất giá trị cụ thể từ CLOB (chứa XML) trong khi tạo một chuỗi phân tách trên mỗi hàng của bảng. Giá trị CLOB có thể rỗng trên một số hàng

  4. Đếm ngày giữa hai phân đoạn

  5. ORA 00918- Lỗi cột được xác định không rõ ràng