TRUNCATE
to polecenie języka definicji danych (DDL), które zatwierdza niejawnie. Nic by to nie popełniło, gdybyś użył DELETE
zamiast tego oświadczenie.
// Deletes ALL Rows; No WHERE Clause
pstmnt.executeQuery("DELETE FROM bd_vehicles_temp_");
Powód TRUNCATE
jest instrukcją DDL, że usuwa dane z tabeli bezpośrednio bez kopiowania ich do obszaru tabel wycofywania zmian . Dlatego TRUNCATE
jest szybszy, ale nie można go cofnąć.
EDYTUJ :(Dlaczego moje WSTAWKI też się zatwierdzają?)
Dzieje się tak, ponieważ zamykasz połączenie bez wywoływania Połączenie#rollback () .
Jeśli Połączenie jest zamknięta bez wyraźnego zatwierdzenia lub cofnięcie; JDBC nie nakazuje tutaj niczego szczególnego, a zatem zachowanie jest zależne od dostawcy bazy danych. W przypadku Oracle, domniemane popełnienie został wydany.
WIĘC, po prostu rollback()
zmiany przed zamknięciem połączenia w wreszcie zablokuj
pstmnt = conn.createStatement();
pstmnt.executeQuery("DELETE FROM bd_vehicles_temp_1");
System.out.println("Query Executed");
conn.rollback();
System.out.println("Changes rolled back");