Oracle
 sql >> Baza danych >  >> RDS >> Oracle

JDBC i Oracle conn.commit i conn.setAutocommit nie działają poprawnie

TRUNCATE to polecenie języka definicji danych (DDL), które zatwierdza niejawnie. Nic by to nie popełniło, gdybyś użył DELETE zamiast tego oświadczenie.

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

Powód TRUNCATE jest instrukcją DDL, że usuwa dane z tabeli bezpośrednio bez kopiowania ich do obszaru tabel wycofywania zmian . Dlatego TRUNCATE jest szybszy, ale nie można go cofnąć.

EDYTUJ :(Dlaczego moje WSTAWKI też się zatwierdzają?)

Dzieje się tak, ponieważ zamykasz połączenie bez wywoływania Połączenie#rollback () .

Jeśli Połączenie jest zamknięta bez wyraźnego zatwierdzenia lub cofnięcie; JDBC nie nakazuje tutaj niczego szczególnego, a zatem zachowanie jest zależne od dostawcy bazy danych. W przypadku Oracle, domniemane popełnienie został wydany.

WIĘC, po prostu rollback() zmiany przed zamknięciem połączenia w wreszcie zablokuj

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. Jak wywołać supermetodę obiektu Oracle PL/SQL?

  2. Czy mogę mieć wiele baz danych w wersji Oracle Express?

  3. Jak zwrócić wiele wierszy przez funkcję składowaną pl/sql?

  4. Linq to Entities Group By (OUTER APPLY) oracle 11.2.0.3.0 nie obsługuje zastosowania

  5. Kolejność wykonania ORACLE SQL ROWNUM