TRUNCATE
é um comando de linguagem de definição de dados (DDL) que confirma implicitamente. Não teria cometido nada, se você tivesse usado o DELETE
declaração em vez disso. // Deletes ALL Rows; No WHERE Clause
pstmnt.executeQuery("DELETE FROM bd_vehicles_temp_");
O motivo
TRUNCATE
é uma instrução DDL é que ela remove os dados da tabela diretamente sem copiá-los para o Rollback Tablespace . É por isso que TRUNCATE
é mais rápido, mas não pode ser revertido. EDITAR :(Por que meus INSERTs também estão se comprometendo?)
Isso porque você está fechando sua Conexão sem chamar Connection#rollback () .
Se uma Conexão é fechado sem um commit explícito ou uma reversão; O JDBC não exige nada em particular aqui e, portanto, o comportamento depende do fornecedor do banco de dados. No caso da Oracle, um commit implícito é emitido.
Então, apenas
rollback()
suas alterações antes de fechar sua Conexão no finalmente quadra pstmnt = conn.createStatement();
pstmnt.executeQuery("DELETE FROM bd_vehicles_temp_1");
System.out.println("Query Executed");
conn.rollback();
System.out.println("Changes rolled back");