sql >> Databasteknik >  >> RDS >> Oracle

JDBC och Oracle conn.commit och conn.setAutocommit fungerar inte korrekt

TRUNCATE är ett DDL-kommando (Data Definition Language) som begår implicit. Det skulle inte ha begått någonting om du hade använt DELETE uttalande istället.

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

Anledningen till TRUNCATE är en DDL-sats är att den tar bort tabelldata direkt utan att kopiera den till Rollback Tablespace . Det är därför TRUNCATE är snabbare men kan inte rullas tillbaka.

REDIGERA :(Varför binder mina INSERTs också?)

Det beror på att du stänger din anslutning utan att ringa Connection#rollback () .

Om en Anslutning stängs utan ett uttryckligt commit eller en återställning; JDBC kräver inget särskilt här och därför är beteendet beroende av databasleverantören. I fallet med Oracle, en implicerad åtagande utfärdas.

SÅ, bara rollback() dina ändringar innan du stänger din anslutning i äntligen blockera

pstmnt = conn.createStatement();

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

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


  1. Postgresql 9.2 pg_dump versionen matchar inte

  2. Det säger att jag inte har någon rad vald?

  3. Vänster yttre fog fungerar som inre fog

  4. INSERT SELECT-sats i Oracle 11G