TRUNCATE
är ett DDL-kommando (Data Definition Language) som begår implicit. Det skulle inte ha begått någonting om du hade använt DELETE
uttalande istället.
// Deletes ALL Rows; No WHERE Clause
pstmnt.executeQuery("DELETE FROM bd_vehicles_temp_");
Anledningen till TRUNCATE
är en DDL-sats är att den tar bort tabelldata direkt utan att kopiera den till Rollback Tablespace . Det är därför TRUNCATE
är snabbare men kan inte rullas tillbaka.
REDIGERA :(Varför binder mina INSERTs också?)
Det beror på att du stänger din anslutning utan att ringa Connection#rollback () .
Om en Anslutning stängs utan ett uttryckligt commit eller en återställning; JDBC kräver inget särskilt här och därför är beteendet beroende av databasleverantören. I fallet med Oracle, en implicerad åtagande utfärdas.
SÅ, bara rollback()
dina ändringar innan du stänger din anslutning i äntligen blockera
pstmnt = conn.createStatement();
pstmnt.executeQuery("DELETE FROM bd_vehicles_temp_1");
System.out.println("Query Executed");
conn.rollback();
System.out.println("Changes rolled back");