TRUNCATE
е команда на език за дефиниране на данни (DDL), която се ангажира имплицитно. Нямаше да извърши нищо, ако бяхте използвали DELETE
вместо това.
// Deletes ALL Rows; No WHERE Clause
pstmnt.executeQuery("DELETE FROM bd_vehicles_temp_");
Причината TRUNCATE
е DDL израз е, че той премахва данните от таблицата директно, без да ги копира в Rollback Tablespace . Ето защо TRUNCATE
е по-бърз, но не може да бъде върнат назад.
РЕДАКТИРАНЕ :(Защо моите INSERT също се ангажират?)
Това е така, защото затваряте вашата Връзка без извикване на Connection#rollback () .
Ако Връзка е затворен без изричен commit или връщане назад; JDBC не налага нищо конкретно тук и следователно поведението зависи от доставчика на базата данни. В случай на Oracle, косвен комит се издава.
И така, просто rollback()
вашите промени, преди да затворите вашата Връзка в накрая блокиране
pstmnt = conn.createStatement();
pstmnt.executeQuery("DELETE FROM bd_vehicles_temp_1");
System.out.println("Query Executed");
conn.rollback();
System.out.println("Changes rolled back");