Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

JDBC dan Oracle conn.commit dan conn.setAutocommit tidak berfungsi dengan baik

TRUNCATE adalah perintah Data Definition Language (DDL) yang dilakukan secara implisit. Itu tidak akan melakukan apa pun, jika Anda menggunakan DELETE sebagai gantinya.

// Deletes ALL Rows; No WHERE Clause
pstmnt.executeQuery("DELETE FROM bd_vehicles_temp_");

Alasan TRUNCATE adalah pernyataan DDL yang menghapus data tabel secara langsung tanpa menyalinnya ke Rollback Tablespace . Itu sebabnya TRUNCATE lebih cepat tetapi tidak dapat dibatalkan.

EDIT :(Mengapa INSERT saya melakukan juga?)

Itu karena Anda menutup Koneksi tanpa memanggil Connection#rollback () .

Jika Koneksi ditutup tanpa komit yang eksplisit atau kembalikan; JDBC tidak mengamanatkan apa pun secara khusus di sini dan karenanya perilakunya tergantung pada vendor basis data. Dalam kasus Oracle, komit imp implisit dikeluarkan.

JADI, cukup rollback() perubahan Anda sebelum menutup Koneksi di akhirnya blokir

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. Menyiapkan lingkungan pengembangan untuk mempelajari PL/SQL

  2. Perbedaan Antara Stempel Waktu dalam Milidetik di Oracle

  3. Cari database Oracle untuk tabel dengan nama kolom tertentu?

  4. Oracle SQL - REGEXP_LIKE berisi karakter selain a-z atau A-Z

  5. Kerangka Sinkronisasi:Oracle/SQLServer