2010-08-17 11 views
19

मुझे त्रुटि java.sql.SQLException: निकास परिणाम ओरेकल डेटाबेस के विरुद्ध क्वेरी चलाने के लिए मिलता है। कनेक्शन वेबस्पेयर में परिभाषित कनेक्शन पूल के माध्यम से है। कोड निष्पादित इस प्रकार है:java.sql.SQLException: थका हुआ परिणाम

  if (rs! = null) (
       while (rs.next()) (
        count = rs.getInt (1); 
       ) 
      ) 

मैं ध्यान दें कि resultset डेटा होता है (rs.next())

धन्यवाद

+0

बयान या संबंध नहीं है परिणाम को पढ़ने के दौरान सेट बंद कर दिया? –

+2

@ एरने: जो कि 'एसक्यूलेक्सप्शन: फेंक दिया गया है' परिणाम बंद कर दिया गया है। – BalusC

+7

भविष्य में, स्टैकट्रैक जोड़ें और रेखा को इंगित करें। स्वीकार किए गए उत्तर को उस रेखा को देखकर जहां इसे फेंक दिया गया था ** आपके प्रश्न में पोस्ट किए गए कोड में ** बिल्कुल नहीं ** था। आपको स्टैकट्रैस की व्याख्या करने के साथ और अधिक अभ्यास करना चाहिए। मैंने अपना जवाब हटा दिया। – BalusC

उत्तर

29

मैंने परिणामसेट को संसाधित करने के बाद कॉलम मान तक पहुंचने का प्रयास करते समय यह त्रुटि देखी गई।

if (rs! = null) { 
    while (rs.next()) { 
    count = rs.getInt(1); 
    } 
    count = rs.getInt(1); //this will throw Exhausted resultset 
} 

आशा यह आप में मदद मिलेगी :)

+0

सरल और साफ़, धन्यवाद –

+0

क्या यह अन्य डेटाबेस (जैसे mysql, sql server आदि) के लिए एक ही अपवाद बनाएगा? –

+0

मुझे नहीं पता। शायद हाँ। मुझे लगता है कि यह डेटाबेस विक्रेता पर निर्भर करता है :-) – sourcerebels

4

आज़माएं:

if (rs != null && rs.first()) { 
    do { 
     count = rs.getInt(1); 
    } while (rs.next()); 
} 
+2

यह परिणाम विफल हो जाएगा यदि परिणाम केवल आगे है ... –

1

यह आमतौर पर तब होता है जब stmt एक अलग ResultSet butexpecting पुन: उपयोग किया जाता है, एक नया stmt और executeQuery creting प्रयास करें। यह मेरे लिए तय है!

2

यदि आप परिणाम सेट को शीर्ष पर रीसेट करते हैं, तो rs.absolute(1) का उपयोग करके आपको परिणाम सेट को रिहा नहीं किया जाएगा।

while (rs.next) { 
    System.out.println(rs.getString(1)); 
} 
rs.absolute(1); 
System.out.println(rs.getString(1)); 

आप rs.absolute (1) के बजाय rs.first() का भी उपयोग कर सकते हैं, यह वही करता है।

0

कृपया सुर करें कि res.getInt (1) शून्य नहीं है। यदि यह शून्य हो सकता है, तो का उपयोग करें पूर्णांक संख्या = शून्य; और int गिनती = 0 नहीं;

Integer count = null; 
    if (rs! = null) (
        while (rs.next()) (
         count = rs.getInt (1); 
        ) 
       ) 
2

जब किसी विशेष स्थिति के लिए डेटाबेस से कोई रिकॉर्ड नहीं लौटाया गया और जब मैंने rs.getString (1) तक पहुंचने का प्रयास किया; मुझे यह त्रुटि "थका हुआ परिणाम" मिला है।

मुद्दे से पहले, मेरी कोड था:

rs.next(); 
sNr= rs.getString(1); 

ठीक करने के बाद:

while (rs.next()) { 
    sNr = rs.getString(1); 
} 
1

यह अपवाद तब होता है जब ResultSet जबकि पाश के बाहर किया जाता है। कृपया लूप के अंदर परिणामसेट से संबंधित सभी प्रोसेसिंग रखें। त्रुटि के पीछे

0

समस्या: जिसमें आप डेटा डालने के बाद लेन-देन आप एक commit क्वेरी आग करने के लिए है पूरा करने के लिए जब तक लेन-देन सफल रहा है Oracle डाटाबेस आप डाला डेटा का उपयोग करने में सक्षम नहीं होगा का उपयोग करने की कोशिश कर रहा है और कर रहे हैं टेबल। चूंकि ओरेकल डेटाबेस डिफ़ॉल्ट रूप से ऑटो प्रतिबद्ध मोड पर नहीं है।

समाधान:

जाओ एसक्यूएल प्लस करने के लिए और निम्नलिखित प्रश्नों का पालन करें ..

SQL*Plus: Release 11.2.0.1.0 Production on Tue Nov 28 15:29:43 2017 

Copyright (c) 1982, 2010, Oracle. All rights reserved. 

Enter user-name: scott 
Enter password: 

Connected to: 
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production 
With the Partitioning, OLAP, Data Mining and Real Application Testing options 

SQL> desc empdetails; 
Name          Null? Type 
----------------------------------------- -------- ---------------------------- 
ENO            NUMBER(38) 
ENAME            VARCHAR2(20) 
SAL            FLOAT(126) 

SQL> insert into empdetails values(1010,'John',45000.00); 

1 row created. 

SQL> commit; 

Commit complete. 
संबंधित मुद्दे