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

JDBC og Oracle conn.commit og conn.setAutocommit fungerer ikke korrekt

TRUNCATE er en DDL-kommando (Data Definition Language), som begår implicit. Den ville ikke have begået noget, hvis du havde brugt DELETE erklæring i stedet for.

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

Årsagen til TRUNCATE er en DDL-sætning er, at den fjerner tabeldataene direkte uden at kopiere dem til Rullback Tablespace . Det er derfor TRUNCATE er hurtigere, men kan ikke rulles tilbage.

REDIGER :(Hvorfor binder mine INSERT'er sig også?)

Det er fordi du lukker din forbindelse uden at ringe til Connection#rollback () .

Hvis en forbindelse er lukket uden en eksplicit commit eller en tilbageføring; JDBC påbyder ikke noget specifikt her, og adfærden er derfor afhængig af databaseleverandøren. I tilfælde af Oracle, en implict forpligtelse er udstedt.

SÅ, bare rollback() dine ændringer, før du lukker din forbindelse i endelig blokere

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. Skal jeg bruge SQL_Variant-datatypen?

  2. Kaldning af MySQL Stored Procedure fra .NET DB Context throws Kun MySqlParameter-objekter må gemmes'

  3. hvordan man bruger Fuzzy look up til at finde sætningen i SQL?

  4. CASE i WHERE CLAUSE i MYSQL