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 एक डीडीएल कथन है कि यह तालिका डेटा को सीधे रोलबैक टेबलस्पेस में कॉपी किए बिना हटा देता है . इसीलिए TRUNCATE तेज़ है लेकिन वापस नहीं लाया जा सकता।

संपादित करें :(मेरे INSERT भी क्यों प्रतिबद्ध हैं?)

ऐसा इसलिए है क्योंकि आप अपना कनेक्शन बंद कर रहे हैं कॉल किए बिना Connection#rollback ()

अगर एक कनेक्शन स्पष्ट प्रतिबद्ध . के बिना बंद है या एक रोलबैक; 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. मैं Oracle में किसी तालिका को उपनाम कैसे दे सकता हूं?

  3. सीडीसी के साथ एडब्ल्यूएस डीएमएस। अद्यतन रिकॉर्ड में केवल अद्यतन फ़ील्ड शामिल है। सभी को कैसे शामिल करें?

  4. पहले कुछ या सबसे अधिक अवलोकन खोजने पर TOP या रैंक का उपयोग करें

  5. sas में proc sql का उपयोग करके गोदाम (ओरेकल इंजन) से डेटा खींचते समय सरल यादृच्छिक नमूनाकरण