TRUNCATE
ist ein DDL-Befehl (Data Definition Language), der implizit festgeschrieben wird. Es hätte nichts festgeschrieben, wenn Sie DELETE
verwendet hätten Anweisung statt.
// Deletes ALL Rows; No WHERE Clause
pstmnt.executeQuery("DELETE FROM bd_vehicles_temp_");
Der Grund TRUNCATE
Eine DDL-Anweisung ist, dass sie die Tabellendaten direkt entfernt, ohne sie in den Rollback Tablespace zu kopieren . Deshalb TRUNCATE
ist schneller, kann aber nicht zurückgesetzt werden.
BEARBEITEN :(Warum werden auch meine INSERTs übergeben?)
Das liegt daran, dass Sie Ihre Verbindung schließen ohne Connection#rollback aufzurufen () .
Wenn eine Verbindung wird ohne explizites commit geschlossen oder ein Rollback; JDBC schreibt hier nichts Besonderes vor und daher ist das Verhalten vom Datenbankanbieter abhängig. Im Fall von Oracle ein implizites commit ausgegeben wird.
Also, einfach rollback()
Ihre Änderungen, bevor Sie Ihre Verbindung schließen im endlich blockieren
pstmnt = conn.createStatement();
pstmnt.executeQuery("DELETE FROM bd_vehicles_temp_1");
System.out.println("Query Executed");
conn.rollback();
System.out.println("Changes rolled back");