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

स्ट्रीमिंग बड़े परिणाम MySQL के साथ सेट होते हैं

केवल फ़ेच आकार सेट करना सही तरीका नहीं है। विवरण#setFetchSize() पहले से ही निम्नलिखित बताता है:

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

JDBC ड्राइवर को संकेत देता है डेटाबेस से प्राप्त की जाने वाली पंक्तियों की संख्या के अनुसार

ड्राइवर वास्तव में संकेत को लागू करने या अनदेखा करने के लिए स्वतंत्र है। कुछ ड्राइवर इसे अनदेखा करते हैं, कुछ ड्राइवर इसे सीधे लागू करते हैं, कुछ ड्राइवरों को अधिक मापदंडों की आवश्यकता होती है। MySQL JDBC ड्राइवर अंतिम श्रेणी में आता है। यदि आप MySQL JDBC ड्राइवर को चेक करते हैं दस्तावेज़ीकरण , आपको निम्न जानकारी दिखाई देगी (हेडर परिणाम सेट तक लगभग 2/3 नीचे स्क्रॉल करें ):

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

इस कार्यक्षमता को सक्षम करने के लिए, आपको निम्नलिखित तरीके से एक स्टेटमेंट इंस्टेंस बनाना होगा:

stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY);
stmt.setFetchSize(Integer.MIN_VALUE);

कृपया संपूर्ण पढ़ें दस्तावेज़ के अनुभाग में, यह इस दृष्टिकोण की चेतावनियों का भी वर्णन करता है। यहाँ एक प्रासंगिक उद्धरण है:

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

इस दृष्टिकोण के साथ कुछ चेतावनी हैं। कनेक्शन पर कोई अन्य प्रश्न जारी करने से पहले आपको परिणाम सेट में सभी पंक्तियों को पढ़ना होगा (या इसे बंद करना होगा), या एक अपवाद फेंक दिया जाएगा।

(...)

यदि स्टेटमेंट लेन-देन के दायरे में है, तो लेन-देन पूरा होने पर ताले जारी किए जाते हैं (जिसका अर्थ है कि स्टेटमेंट को पहले पूरा करने की आवश्यकता है)। अधिकांश अन्य डेटाबेस की तरह, स्टेटमेंट तब तक पूरे नहीं होते हैं जब तक कि स्टेटमेंट पर लंबित सभी परिणाम पढ़े नहीं जाते हैं या स्टेटमेंट के लिए सक्रिय परिणाम सेट बंद नहीं होता है।

अगर वह OutOfMemoryError को ठीक नहीं करता है (नहीं अपवाद ), तो समस्या यह हो सकती है कि आप तुरंत को संसाधित करने के बजाय जावा की मेमोरी में सभी डेटा संग्रहीत कर रहे हैं जैसे ही डेटा आता है। इसके लिए आपके कोड में और बदलाव की आवश्यकता होगी, शायद एक पूर्ण पुनर्लेखन। मैंने इसी तरह के प्रश्न का उत्तर यहां



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. त्रुटि 2002 (HY000):सॉकेट '/var/run/mysqld/mysqld.sock' के माध्यम से स्थानीय MySQL सर्वर से कनेक्ट नहीं हो सकता (2)

  2. MySQL - चुनें कि फ़ील्ड कहां है (सबक्वायरी) - बेहद धीमा क्यों?

  3. MySQL 'user_id' जहां क्लॉज अस्पष्ट समस्या है

  4. कैसे जांचें कि कोई तालिका MySQL में बनाने से पहले पहले से मौजूद है या नहीं?

  5. MySQL में VALUES स्टेटमेंट का उपयोग करते समय "ERROR 1136 (21S01):कॉलम काउंट वैल्यू काउंट से मेल नहीं खाता" को ठीक करें।