sql >> Databáze >  >> RDS >> Oracle

JDBC a Oracle conn.commit a conn.setAutocommit nefungují správně

TRUNCATE je příkaz jazyka DDL (Data Definition Language), který se implicitně potvrzuje. Pokud byste použili DELETE, nic by to neprovedlo místo toho prohlášení.

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

Důvod TRUNCATE je příkaz DDL je, že odstraňuje data tabulky přímo bez jejich kopírování do rollback Tablespace . Proto TRUNCATE je rychlejší, ale nelze jej vrátit zpět.

UPRAVIT :(Proč se zavazují i ​​moje INSERTy?)

Je to proto, že uzavíráte Připojení bez volání Connection#rollback () .

Pokud Připojení je uzavřena bez výslovného závazku nebo vrácení zpět; JDBC zde nic konkrétního nenařizuje, a proto je chování závislé na dodavateli databáze. V případě Oracle implicitní závazek je vydáno.

Takže stačí rollback() provedete změny před uzavřením Připojení v konečně blok

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. Raspberry pi Žádný modul s názvem 'cx_Oracle'

  2. Nastavení DefaultDataPath a DefaultLogPath při nasazení v databázovém projektu VS2010

  3. Soubor nenalezen Výjimka při pokusu o nahrání souboru na server xampp z aplikace pro Android

  4. SQL:AVG s hodnotami NULL