TRUNCATE
is een Data Definition Language (DDL)-opdracht die impliciet vastlegt. Het zou niets hebben vastgelegd als je de DELETE
. had gebruikt verklaring in plaats daarvan.
// Deletes ALL Rows; No WHERE Clause
pstmnt.executeQuery("DELETE FROM bd_vehicles_temp_");
De reden TRUNCATE
is een DDL-statement is dat het de tabelgegevens direct verwijdert zonder deze naar de Rollback Tablespace te kopiëren . Daarom TRUNCATE
is sneller maar kan niet worden teruggedraaid.
BEWERKEN :(Waarom worden mijn INSERT's ook vastgelegd?)
Dat komt omdat je je Verbinding verbreekt zonder Connection#rollback te bellen () .
Als een Verbinding is gesloten zonder een expliciete toezegging of een terugdraaien; JDBC verplicht hier niets in het bijzonder en daarom is het gedrag afhankelijk van de databaseleverancier. In het geval van Oracle, een impliciete commit wordt uitgegeven.
DUS, gewoon rollback()
uw wijzigingen voordat u uw Verbinding sluit in de eindelijk 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");