Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

JDBC e Oracle conn.commit e conn.setAutocommit não estão funcionando corretamente


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");