यदि कोई कथन संख्या या एकाधिक लौटा सकता है परिणाम, आपको executeQuery
का उपयोग नहीं करना चाहिए , लेकिन execute()
इसके बजाय, यह विधि boolean
लौटाती है पहले परिणाम के प्रकार को दर्शाता है:
true
:परिणाम एकResultSet
हैfalse
:परिणाम एक अद्यतन गणना है
यदि परिणाम true
है , तो आप getResultSet()
. का उपयोग करें ResultSet
को पुनः प्राप्त करने के लिए , अन्यथा getUpdateCount()
अद्यतन गणना पुनर्प्राप्त करने के लिए। अगर अपडेट की संख्या -1
. है इसका मतलब है कि कोई और परिणाम नहीं हैं। ध्यान दें कि अपडेट की संख्या -1
. भी होगी जब वर्तमान परिणाम एक ResultSet
है . यह जानना भी अच्छा है कि getResultSet()
यदि कोई और परिणाम नहीं हैं या यदि परिणाम एक अद्यतन गणना है, तो शून्य वापस आ जाना चाहिए।
अब यदि आप अधिक परिणाम प्राप्त करना चाहते हैं, तो आप getMoreResults()
. पर कॉल करें (या उसका भाई int
. स्वीकार कर रहा है पैरामीटर)। boolean
. का रिटर्न मान इसका वही अर्थ है जो execute()
. का है , इसलिए false
इसका मतलब यह नहीं है कि कोई और परिणाम नहीं हैं!
यदि getMoreResults()
झूठी वापसी करता है और getUpdateCount()
रिटर्न -1
(जैसा कि जावाडोक में भी प्रलेखित है)
अनिवार्य रूप से इसका मतलब यह है कि यदि आप सभी परिणामों को सही ढंग से संसाधित करना चाहते हैं तो आपको नीचे जैसा कुछ करना होगा:
boolean result = stmt.execute(...);
while(true)
if (result) {
ResultSet rs = stmt.getResultSet();
// Do something with resultset ...
} else {
int updateCount = stmt.getUpdateCount();
if (updateCount == -1) {
// no more results
break;
}
// Do something with update count ...
}
result = stmt.getMoreResults();
}
नोट:इस उत्तर का एक भाग जावा एसक्यूएल के मेरे उत्तर पर आधारित है:Statement.hasResultSet()?