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

कैसे विशाल तालिका से सभी पंक्तियों को पढ़ने के लिए?

संक्षिप्त संस्करण है, stmt.setFetchSize(50); . पर कॉल करें और conn.setAutoCommit(false); संपूर्ण ResultSet . पढ़ने से बचने के लिए स्मृति में।

यहाँ दस्तावेज़ क्या कहते हैं:

<ब्लॉकक्वॉट>

कर्सर के आधार पर परिणाम प्राप्त करना

डिफ़ॉल्ट रूप से ड्राइवर एक बार में क्वेरी के लिए सभी परिणाम एकत्र करता है। यह बड़े डेटा सेट के लिए असुविधाजनक हो सकता है, इसलिए JDBC ड्राइवर एक डेटाबेस कर्सर पर एक ResultSet को आधार बनाने और केवल एक छोटी संख्या में पंक्तियों को प्राप्त करने का एक साधन प्रदान करता है।

कनेक्शन के क्लाइंट साइड पर पंक्तियों की एक छोटी संख्या को कैश किया जाता है और समाप्त होने पर पंक्तियों के अगले ब्लॉक को कर्सर को फिर से स्थापित करके पुनर्प्राप्त किया जाता है।

नोट:

  • कर्सर आधारित परिणामसेट का उपयोग सभी स्थितियों में नहीं किया जा सकता है। ऐसे कई प्रतिबंध हैं जो ड्राइवर को चुपचाप वापस पूरे रिजल्टसेट को एक बार में लाने के लिए मजबूर कर देंगे।

  • सर्वर से कनेक्शन V3 प्रोटोकॉल का उपयोग करना चाहिए। यह सर्वर संस्करण7.4 और बाद के संस्करण के लिए (और केवल इसके द्वारा समर्थित है) डिफ़ॉल्ट है।-

  • कनेक्शन ऑटोकॉमिट मोड में नहीं होना चाहिए। बैकएंड लेन-देन के अंत में कर्सर को बंद कर देता है, इसलिए ऑटोकॉमिट मोड में बैकएंड ने कर्सर को बंद कर दिया होगा इससे पहले कि कुछ भी इससे लाया जा सके।-

  • स्टेटमेंट को ResultSet प्रकार के ResultSet.TYPE_FORWARD_ONLY के साथ बनाया जाना चाहिए। यह डिफ़ॉल्ट है, इसलिए इसका लाभ उठाने के लिए किसी कोड को फिर से लिखने की आवश्यकता नहीं होगी, लेकिन इसका अर्थ यह भी है कि आप पीछे की ओर स्क्रॉल नहीं कर सकते हैं या अन्यथा परिणामसेट में इधर-उधर नहीं जा सकते हैं।-

  • दी गई क्वेरी एक एकल कथन होनी चाहिए, न कि अर्धविराम के साथ कई कथन एक साथ जुड़े हुए होने चाहिए।

उदाहरण 5.2. कर्सर को चालू और बंद करने के लिए फ़ेच आकार सेट करना.

कोड को कर्सर मोड में बदलना उतना ही सरल है जितना कि स्टेटमेंट के फ़ेच साइज़ को उचित आकार में सेट करना। फ़ेच आकार को वापस 0 पर सेट करने से सभी पंक्तियों को कैश किया जाएगा (डिफ़ॉल्ट व्यवहार)।

// make sure autocommit is off
conn.setAutoCommit(false);
Statement st = conn.createStatement();

// Turn use of the cursor on.
st.setFetchSize(50);
ResultSet rs = st.executeQuery("SELECT * FROM mytable");
while (rs.next()) {
   System.out.print("a row was returned.");
}
rs.close();

// Turn the cursor off.
st.setFetchSize(0);
rs = st.executeQuery("SELECT * FROM mytable");
while (rs.next()) {
   System.out.print("many rows were returned.");
}
rs.close();

// Close the statement.
st.close();


  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. PostgreSQL में अनुक्रमणिका वाले स्तंभों की सूची बनाएं

  3. पोस्टग्रेएसक्यूएल बराबर टॉप एन विद टाईज़:लिमिट विद टाईज़?

  4. PostgreSQL में IN बनाम कोई भी ऑपरेटर

  5. PL/pgSQL फ़ंक्शन में वैकल्पिक तर्क