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