Oracle
 sql >> Database >  >> RDS >> Oracle

JDBC e Oracle conn.commit e conn.setAutocommit non funzionano correttamente

TRUNCATE è un comando DDL (Data Definition Language) che esegue il commit in modo implicito. Non avrebbe commesso nulla, se avessi usato il DELETE dichiarazione invece.

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

Il motivo TRUNCATE è un'istruzione DDL è che rimuove i dati della tabella direttamente senza copiarli nel Rollback Tablespace . Ecco perché TRUNCATE è più veloce ma non può essere ripristinato.

MODIFICA :(Perché anche i miei INSERT si stanno impegnando?)

Questo perché stai chiudendo la tua Connessione senza chiamare Connection#rollback () .

Se una connessione viene chiuso senza un commit esplicito o un ripristino; JDBC non impone nulla in particolare qui e quindi il comportamento dipende dal fornitore del database. In caso di Oracle, un implicito commit viene rilasciato.

Quindi, solo rollback() le modifiche prima di chiudere la Connessione nel finalmente bloccare

pstmnt = conn.createStatement();

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

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