Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

JDBC प्रकार स्क्रॉल असंवेदनशील और संवेदनशील

अन्य सुविधाओं की तरह जो काम नहीं करती आपको अवश्य पढ़ना चाहिए दस्तावेज़ीकरण उनका उपयोग करने से पहले।

महत्वपूर्ण बात खिड़की की धारणा है

इसलिए प्रत्येक पंक्ति के परिवर्तन को देखने के लिए, आपको लाने का आकार . सेट करना होगा से 1.

ध्यान दें कि यह resultSet . के लिए फ़ेच आकार सेट करने के लिए पर्याप्त नहीं है , क्योंकि डिफ़ॉल्ट फ़ेच आकार 10 है और परिवर्तन केवल 11वीं और उसके बाद की पंक्तियों के लिए मान्य है।

इसलिए लाने का आकार prepareStatement . पर सेट होना चाहिए :

 def stmt = con.prepareStatement("""select id, val from test
 where  id between ? and ?  order by id""", ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE)
 stmt.setFetchSize(1)
 // set bind variables and execute statement

अब rs.next() . के हर कॉल पर एक नई विंडो खोली जाती है, जो refreshRow

जो डेटाबेस से वर्तमान मान प्राप्त करता है।

ध्यान दें कि यह व्यवहार केवल TYPE_SCROLL_SENSITIVE के लिए किया जाता है TYPE_SCROLL_INSENSITIVE . के लिए नहीं refreshRow कहा जाता है, इसलिए आप प्रारंभिक क्वेरी के निरंतर डेटा देखते हैं, भले ही आप विंडो स्विच कर रहे हों। आप refreshRow . पर कॉल कर सकते हैं स्पष्ट रूप से समान प्रभाव देखने के लिए।

तकनीकी रूप से कार्यक्षमता दो कर्सर का उपयोग करके कार्यान्वित की जाती है। पहला वाला इस्तेमाल की गई क्वेरी से मेल खाता है, केवल ROWID कॉलम जोड़ रहा है।

 select rowid as "__Oracle_JDBC_internal_ROWID__", id, val from test
 where  id between :1  and :2   order by id

प्रत्येक विंडो स्विच पर कॉल किया गया दूसरा कर्सर (यानी प्राप्त की गई प्रत्येक पंक्ति के लिए फ़ेच आकार =1 के लिए) साधारण बाहरी सहेजे गए rowid में शामिल हो जाता है वर्तमान डेटा को फिर से लाने के लिए पहले कर्सर से क्वेरी के साथ।

WITH "__JDBC_ROWIDS__" AS (SELECT COLUMN_VALUE ID, ROWNUM NUM FROM TABLE(:1 ))
SELECT "__JDBC_ORIGINAL__".*
FROM (select rowid as "__Oracle_JDBC_internal_ROWID__", id, val from test
where  id between :2  and :3   order by id) "__JDBC_ORIGINAL__", "__JDBC_ROWIDS__"
WHERE "__JDBC_ORIGINAL__"."__Oracle_JDBC_internal_ROWID__"(+) = "__JDBC_ROWIDS__".ID
ORDER BY "__JDBC_ROWIDS__".NUM 

वहाँ समान प्रश्न हैं, लेकिन उनमें से कोई भी वास्तव में समस्या की व्याख्या नहीं करता है, इसलिए मैं इस प्रश्न को डुप्लिकेट के रूप में चिह्नित नहीं करता:

ResultSet का व्यवहार।TYPE_SCROLL_SENSITIVE

JDBC ResultSet Type_Scroll_Sensitive

JDBC परिणाम सेट प्रकार स्क्रॉल संवेदनशील

संक्षिप्त उत्तर यह है कि आपके द्वारा उपयोग किया जाने वाला डिफ़ॉल्ट फ़ेच आकार एकल पंक्ति के अपडेट को देखने के लिए उच्च है

परीक्षण Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 . पर किया गया था DriverVersion 12.2.0.1.0




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. YYYY-MM-DD HH:MM:SS प्रारूप के लिए Oracle में टाइमस्टैम्प रूपांतरण

  2. ORA-02270:इस कॉलम-सूची के लिए कोई मेल खाने वाली अद्वितीय या प्राथमिक कुंजी नहीं है

  3. प्राथमिक कुंजी अद्यतन बनाम प्राथमिक कुंजी हटाना + सम्मिलन

  4. Oracle में इसे बनाने से पहले चेक टेबल मौजूद है या नहीं

  5. एसक्यूएल फिडल आउटपुट त्रुटि