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

MySQL परिणामसेट स्क्रॉल करने योग्य/अद्यतन करने योग्य अपेक्षा के अनुरूप काम नहीं कर रहा है

जैसा कि मार्क रोट्टेवेल ने प्रश्न पर एक टिप्पणी में उल्लेख किया है, MySQL डिफ़ॉल्ट रूप से परिणामसेट डेटा को कैश करता है (बेन जे। क्रिस्टेंसन द्वारा एक ब्लॉग लेख में भी चर्चा की गई है यहां ) इस कैशिंग का एक स्पष्ट दुष्परिणाम यह है कि MySQL Connector/J वास्तव में स्क्रॉल करने योग्य होने के लिए एक TYPE_FORWARD_ONLY ResultSet को "अपग्रेड" करेगा:

Statement s = dbConnection.createStatement(
        ResultSet.TYPE_FORWARD_ONLY, 
        ResultSet.CONCUR_READ_ONLY);
ResultSet rs = s.executeQuery("SELECT * FROM testdata");
rs.last();
System.out.println(String.format("Current row number: %d", rs.getRow()));
rs.previous();
System.out.println(String.format("Current row number: %d", rs.getRow()));

प्रदर्शित करता है

Current row number: 3
Current row number: 2

ऊपर उद्धृत ब्लॉग आलेख के अनुसार, कैशिंग को रोकने और परिणामसेट डेटा को "स्ट्रीम" करने का तरीका Statement.setFetchSize का उपयोग करना है :

Statement s = dbConnection.createStatement(
        ResultSet.TYPE_FORWARD_ONLY, 
        ResultSet.CONCUR_READ_ONLY);
s.setFetchSize(Integer.MIN_VALUE);
ResultSet rs = s.executeQuery("SELECT * FROM testdata");
rs.next();
System.out.println("Data from first row: " + rs.getString(2));
System.out.println("now let's try rs.last() ...");
try {
    rs.last();
    System.out.println("... Okay, done.");
} catch (Exception e) {
    System.out.println("... Exception: " + e.getMessage());
}

जिसके परिणामस्वरूप

Data from first row: Gord
now let's try rs.last() ...
... Exception: Operation not supported for streaming result sets


  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. रेल MySQL स्थापित कर रहा है - mysql2 स्थापित करने में त्रुटि:त्रुटि:मणि देशी एक्सटेंशन बनाने में विफल

  3. पीडीओ स्टेटमेंट में कॉलम का नाम गतिशील रूप से बदलें

  4. MySQL में ऑटो-इन्क्रीमेंट रीसेट नहीं हो रहा है

  5. Bind_param गैर-वस्तु त्रुटि w/mysqli