sql >> Base de Datos >  >> RDS >> Oracle

JDBC y Oracle conn.commit y conn.setAutocommit no funcionan correctamente

TRUNCATE es un comando de lenguaje de definición de datos (DDL) que se confirma implícitamente. No habría cometido nada si hubiera usado DELETE declaración en su lugar.

// Deletes ALL Rows; No WHERE Clause
pstmnt.executeQuery("DELETE FROM bd_vehicles_temp_");

La razón TRUNCATE es una instrucción DDL es que elimina los datos de la tabla directamente sin copiarlos en el Rollback Tablespace . Por eso TRUNCATE es más rápido pero no se puede revertir.

EDITAR :(¿Por qué mis INSERT también se están confirmando?)

Eso es porque estás cerrando tu Conexión sin llamar a Connection#rollback () .

Si una Conexión se cierra sin un commit explícito o una reversión; JDBC no exige nada en particular aquí y, por lo tanto, el comportamiento depende del proveedor de la base de datos. En el caso de Oracle, un compromiso implícito se emite.

SO, solo rollback() sus cambios antes de cerrar su Conexión en el finalmente bloquear

pstmnt = conn.createStatement();

pstmnt.executeQuery("DELETE FROM bd_vehicles_temp_1");
System.out.println("Query Executed");

conn.rollback();
System.out.println("Changes rolled back");