TRUNCATE
er en DDL-kommando (Data Definition Language), som begår implicit. Den ville ikke have begået noget, hvis du havde brugt DELETE
erklæring i stedet for.
// Deletes ALL Rows; No WHERE Clause
pstmnt.executeQuery("DELETE FROM bd_vehicles_temp_");
Årsagen til TRUNCATE
er en DDL-sætning er, at den fjerner tabeldataene direkte uden at kopiere dem til Rullback Tablespace . Det er derfor TRUNCATE
er hurtigere, men kan ikke rulles tilbage.
REDIGER :(Hvorfor binder mine INSERT'er sig også?)
Det er fordi du lukker din forbindelse uden at ringe til Connection#rollback () .
Hvis en forbindelse er lukket uden en eksplicit commit eller en tilbageføring; JDBC påbyder ikke noget specifikt her, og adfærden er derfor afhængig af databaseleverandøren. I tilfælde af Oracle, en implict forpligtelse er udstedt.
SÅ, bare rollback()
dine ændringer, før du lukker din forbindelse i endelig blokere
pstmnt = conn.createStatement();
pstmnt.executeQuery("DELETE FROM bd_vehicles_temp_1");
System.out.println("Query Executed");
conn.rollback();
System.out.println("Changes rolled back");