Oracle
 sql >> база данни >  >> RDS >> Oracle

JDBC и Oracle conn.commit и conn.setAutocommit не работят правилно

TRUNCATE е команда на език за дефиниране на данни (DDL), която се ангажира имплицитно. Нямаше да извърши нищо, ако бяхте използвали DELETE вместо това.

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

Причината TRUNCATE е DDL израз е, че той премахва данните от таблицата директно, без да ги копира в Rollback Tablespace . Ето защо TRUNCATE е по-бърз, но не може да бъде върнат назад.

РЕДАКТИРАНЕ :(Защо моите INSERT също се ангажират?)

Това е така, защото затваряте вашата Връзка без извикване на Connection#rollback () .

Ако Връзка е затворен без изричен commit или връщане назад; JDBC не налага нищо конкретно тук и следователно поведението зависи от доставчика на базата данни. В случай на Oracle, косвен комит се издава.

И така, просто rollback() вашите промени, преди да затворите вашата Връзка в накрая блокиране

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Решение кога да се създаде индекс на колона на таблица в база данни?

  2. какво означава това подреждане по NULL

  3. Свързване на оракула в приложението за Android

  4. ORACLE SQL select distinct без премахване на дубликати

  5. изпълни незабавно без показване на записи на израза Dynamic Select