दिलचस्प पोस्ट
Python के सुपर () कई विरासत के साथ कैसे काम करता है? गंज और समूह द्वारा के लिए Django समतुल्य क्या नियमित अभिव्यक्ति में एक काउंटर वेरिएबल की तरह कुछ है? कैसे स्क्लिट में छवि को ब्लॉब के रूप में संग्रहीत करना और इसे कैसे प्राप्त करना है? एंड्रॉइड में कस्टम नेविगेशन ड्रॉवर कैसे बनाएं क्षेत्र: IOError: अमान्य मोड ('डब्ल्यू') या फ़ाइल नाम जावास्क्रिप्ट दिनांक टाइमज़ोन अंक 2d सरणी के लिए एक सूचक क्या मैं एक ही पृष्ठ पर jQuery के कई संस्करणों का उपयोग कर सकता हूं? MySQL उपयोगकर्ता डीबी में पासवर्ड कॉलम नहीं है – OSX पर MySQL स्थापित करना क्या पृष्ठभूमि-स्थिति- x (पृष्ठभूमि-स्थिति- y) एक मानक W3C सीएसएस संपत्ति है? JQuery का उपयोग कर फ़ॉर्म सबमिट करें समय की तुलना मेमोअनाइजेशन और डायनामिक प्रोग्रामिंग में अंतर क्या है? जावा में स्ट्रिंग विधि के साथ स्ट्रिंग को एक पूर्णांक सरणी कैसे रूपांतरित करना

जावा परिणाम के परिणाम की जाँच करें कि क्या कोई परिणाम है या नहीं

Resultset है hasNext के लिए कोई तरीका नहीं है मैं यह जानना चाहता हूं कि परिणामस्वरूप कोई मान है या नहीं

क्या यह सही तरीका है

if (!resultSet.next() ) { System.out.println("no data"); } 

वेब के समाधान से एकत्रित समाधान "जावा परिणाम के परिणाम की जाँच करें कि क्या कोई परिणाम है या नहीं"

यह सही है, शुरू में ResultSet का कर्सर पहली पंक्ति से पहले इंगित करता है, अगर next() कॉल को false देता false तो ResultSet में कोई डेटा नहीं था।

यदि आप इस पद्धति का उपयोग करते हैं, तो आपको उसे पहले रीसेट करने के तुरंत बाद कॉल करना पड़ सकता है, क्योंकि यह अब पहली पंक्ति से पहले ही स्थिति में है।

हालांकि यह ध्यान दिया जाना चाहिए, कि सेफ़र के जवाब नीचे दिए गए इस सवाल का एक और अधिक खूबसूरत समाधान है।

यह मानते हुए कि आप एक नए लौटे हुए परिणाम के साथ काम कर रहे हैं जिसके ResultSet कर्सर पहली पंक्ति से पहले इंगित कर रहे हैं, यह जांचने का एक आसान तरीका है बस कॉल करें है isBeforeFirst() । यह डाटा को पढ़ने के लिए पीछे से ट्रैक करने से बचा जाता है

जैसा कि दस्तावेज में समझाया गया है, यह गलत देता है यदि कर्सर पहले रिकॉर्ड से पहले नहीं है या यदि ResultSet में कोई पंक्ति नहीं है

 if (!resultSet.isBeforeFirst() ) { System.out.println("No data"); } 

आप हमेशा अगली अप सामने कर सकते हैं, और सिर्फ एक पोस्ट लूप जांच करते हैं

 if (!resultSet.next() ) { System.out.println("no data"); } else { do { //statement(s) } while (resultSet.next()); } 

आप आमतौर पर ऐसा कुछ करते हैं:

 while ( resultSet.next() ) { // Read the next item resultSet.getString("columnName"); } 

यदि आप रिक्त सेट की रिपोर्ट करना चाहते हैं, तो आइटम को पढ़ते हुए एक चर गणना करें। यदि आपको केवल एक आइटम पढ़ने की आवश्यकता है, तो आपका कोड पर्याप्त है

ResultSet.next () का उपयोग करने के लिए सर्वोत्तम करें {…} जबकि इसके लिए () वाक्यविन्यास।

"किसी भी परिणाम के लिए चेक" कॉल परिणामस्वरूप.नेट () कर्सर को पहली पंक्ति में ले जाता है, इसलिए करें {…} का उपयोग करें जबकि () सिंटैक्स उस पंक्ति को संसाधित करने के लिए, जबकि पाश द्वारा लौट की गई शेष पंक्तियों की प्रक्रिया जारी रखती है।

इस तरह से आप किसी भी परिणाम की जांच कर सकते हैं, जबकि एक ही समय में किसी भी परिणाम को वापस लौटाया जा रहा है।

 if(resultSet.next()) { // Checks for any results and moves cursor to first row, do { // Use 'do...while' to process the first row, while continuing to process remaining rows } while (resultSet.next()); } 

सबसे व्यवहार्य उत्तर के मुताबिक सुझाव है "ईश्वरफ़ोस्ट ()"। यह सबसे अच्छा समाधान नहीं है यदि आपके पास "केवल अग्रेषित प्रकार" नहीं है

" पहले () " नामक एक विधि है सटीक समान परिणाम प्राप्त करने के लिए यह कम उतार-चढ़ाव है आप जांचते हैं कि आपके "परिणाम" में कुछ है या नहीं और अपने कर्सर को आगे नहीं बढ़ाएं

प्रलेखन कहता है: "(…) गलत अगर परिणाम सेट में कोई पंक्ति नहीं है "।

 if(rs.first()){ //do stuff } 

आप कर्सर को आगे बढ़ाने के बिना किसी भी पंक्तियों को लौटाएंगे या नहीं, यह जांचने के लिए आप केवल बियरफर्स्ट () कॉल कर सकते हैं, फिर सामान्य रूप से आगे बढ़ें। – साप्ताहिक 2 सितंबर '14 को 1 9 .00 बजे

हालांकि, "isBeforeFirst ()" और "पहले ()" के बीच एक अंतर है पहली बार एक अपवाद उत्पन्न करता है, यदि किसी परिणाम के प्रकार "अग्रेषित केवल" से किया जाता है

दो फूट वर्गों की तुलना करें: http://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html#isBeforeFirst () http://docs.oracle.com/javase/7/docs /api/java/sql/ResultSet.html#first ()

ठीक है, मूल रूप से इसका अर्थ यह है कि जब तक आपका "अग्रेषित केवल" प्रकार होता है, तब तक आपको "ऐफ़ायर फर्स्ट" का उपयोग करना चाहिए अन्यथा यह "पहले ()" का उपयोग करने के लिए कम ओवरकिल है

यह काम करेगा यदि आप देखना चाहते हैं कि क्या परिणाम हां में कोई भी पंक्ति हां निर्धारित है।

ध्यान दें कि next() हमेशा अगली पंक्ति में स्थानांतरित होता है, इसलिए यदि आप परिणाम से कोई भी पढ़ना करने की योजना बना रहे हैं तो आपको उस खाते को ध्यान में रखना होगा।

ResultSet (जब बस पढ़ने) के साथ सामान्य उपयोग है:

 while (resultSet.next()) { ... read from the row here ... } 

कौन सा स्पष्ट रूप से सही ढंग से काम नहीं करेगा यदि आप पहले से जांच कर चुके हैं next() एक बार पहले से जांचने के लिए कि क्या परिणाम सेट रिक्त था, तो उसके लिए देखें हालांकि "बैक अप अप" के तरीकों के लिए, वे सभी प्रकार के परिणाम सेटों के लिए समर्थित नहीं हैं।

इसके बजाय पूरी तरह से सुनिश्चित करने के लिए कि परिणामस्वरूप रिक्त है या कर्सर की स्थिति की परवाह किए बिना, मैं ऐसा कुछ करूँगा:

 public static boolean isMyResultSetEmpty(ResultSet rs) throws SQLException { return (!rs.isBeforeFirst() && rs.getRow() == 0); } 

यदि ResultSet खाली है, गलत नहीं तो यह फ़ंक्शन सत्य वापस लौटाएगा या न ही SQLException फेंक सकता है अगर ResultSet बंद / अनइंनेइज़ेड है

 if (!resultSet.isAfterLast() ) { System.out.println("No data"); } 

रिक्त परिणाम सेट के लिए isAfterLast() भी झूठ देता है, लेकिन चूंकि कर्सर पहली पंक्ति से पहले होता है, यह विधि अधिक स्पष्ट लगता है।

यह एक व्यावहारिक और आसान पढ़ने वाला टुकड़ा है जो मुझे विश्वास है।

  if (res.next()) { do { // successfully in. do the right things. } while (res.next()); } else { // no results back. warn the user. } 
 if(reset.first) { } else { system.out.println("No raw or reset is empty"); } 

क्योंकि अगर ResultSet में कोई कच्चा नहीं है तो reset.first करता है।

सबसे अच्छी बात यह है कि पहली पंक्ति की जांच करें ताकि जब आप डेटा प्राप्त करना चाहते हों तो आप पंक्ति को छोड़ने की गलती से बच सकते हैं ऐसा कुछ: यदि (! ResultSet.first ()) {System.out.println ("कोई डेटा नहीं"); }

ResultSet.next () का उपयोग करके आप आसानी से परिणाम प्राप्त कर सकते हैं, परिणामस्वरूप किसी भी मान युक्त या नहीं

 ResultSet resultSet = preparedStatement.executeQuery(); if(resultSet.next()) //resultSet contain some values else // empty resultSet 
 ResultSet rs = rs.executeQuery(); if(rs.next()) { rs = rs.executeQuery(); while(rs.next()) { //do code part } } else { //else if no result set } 

यह फिर से निष्पादित करने के लिए बेहतर है क्योंकि जब हम कॉल करते हैं if(rs.next()){....} पहली पंक्ति निष्पादित की जाएगी और इसके बाद के अंदर while(rs.next()){....} हम अगले लाइन से परिणाम प्राप्त करेंगे इसलिए मुझे लगता है कि क्वेरी के पुन: निष्पादन के अंदर if बेहतर विकल्प है।

 ResultSet result = stmt.executeQuery(sqlQuery); if (!result.next()) status = "ERROR"; else status = "SUCCESS"; 

मैंने निम्न विधि को जांचने के लिए बनाया है कि क्या ResultSet खाली है I

 public static boolean resultSetIsEmpty(ResultSet rs){ try { // We point the last row rs.last(); int rsRows=rs.getRow(); // get last row number if (rsRows == 0) { return true; } // It is necessary to back to top the pointer, so we can see all rows in our ResultSet object. rs.beforeFirst(); return false; }catch(SQLException ex){ return true; } } 

निम्न विचारों को रखना बहुत महत्वपूर्ण है:

CallableStatement ऑब्जेक्ट को ResultSet ऑब्जेक्ट को समाप्त करने के लिए सेट किया जाना चाहिए और शीर्ष पर वापस जाएं

TYPE_SCROLL_SENSITIVE : ResultSet ऑब्जेक्ट अंत में बदलाव कर सकते हैं और शीर्ष पर वापस जा सकते हैं आगे पिछले परिवर्तनों को पकड़ सकता है

CONCUR_READ_ONLY : हम ResultSet ऑब्जेक्ट डेटा पढ़ सकते हैं, लेकिन अपडेट नहीं कर सकते

 CallableStatement proc = dbconex.prepareCall(select, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); 

आप ऐसा कुछ कर सकते हैं

 boolean found = false; while ( resultSet.next() ) { found = true; resultSet.getString("column_name"); } if (!found) System.out.println("No Data"); 

मैं वर्तमान पंक्ति को पहले सूचकांक (प्राथमिक कुंजी से निपटने) में सेट करने का प्रयास कर रहा हूं। मै सुझाव दूंगा

 if(rs.absolute(1)){ System.out.println("We have data"); } else { System.out.println("No data"); } 

जब ResultSet आबादी है, यह पहली पंक्ति से पहले इंगित करता है इसे पहली पंक्ति ( rs.absolute(1) द्वारा इंगित करते समय) पर सेट करते समय यह सत्य निरूपण वापस करेगा कि यह पंक्ति 1 पर सफलतापूर्वक रखा गया था या यदि पंक्ति मौजूद नहीं है तो गलत होगा। हम इसे एक्सट्रपलेशन कर सकते हैं

 for(int i=1; rs.absolute(i); i++){ //Code } 

जो वर्तमान पंक्ति को स्थिति की स्थिति में सेट करता है और अगर पंक्ति मौजूद नहीं है तो असफल हो जायेगी। यह सिर्फ एक वैकल्पिक तरीका है

 while(rs.next()){ //Code } 

मुझे लगता है कि परिणाम सेट की जांच के लिए सबसे आसान तरीका संकुल के तहत संग्रह यूटल्स के जरिए है। Org.apache.commons.collections.CollectionUtils

 if(CollectionUtils.isNotEmpty(resultList)){ /** * do some stuff */ } 

यह शून्य के साथ ही खाली परिणाम सेट हालत के लिए जांच करेगा।

अधिक जानकारी के लिए आप निम्न दस्तावेज़ का उल्लेख कर सकते हैं। CollectionUtils

क्यों नहीं rs.getRow () का उपयोग करें?

 int getRow() throws SQLException Retrieves the current row number. The first row is number 1, the second number 2, and so on. Note:Support for the getRow method is optional for ResultSets with a result set type of TYPE_FORWARD_ONLY Returns: the current row number; 0 if there is no current row Throws: SQLException - if a database access error occurs or this method is called on a closed result set SQLFeatureNotSupportedException - if the JDBC driver does not support this method Since: 1.2 

मेरे लिए जांच "if (rs.getRow ()! = 0)" अभी ठीक काम करने लगता है।

प्रारंभ में, परिणाम सेट ऑब्जेक्ट (आरएस) बीएफआर को अंक (पहले रिकॉर्ड से पहले) एक बार जब हम rs.next () का उपयोग करते हैं, तो कर्सर पहले रिकॉर्ड को इंगित करता है और आरएस "सत्य" रखता है। जबकि लूप का उपयोग करना आप टेबल के सभी रिकॉर्ड मुद्रित कर सकते हैं। सभी रिकॉर्ड पुनर्प्राप्त किए जाने के बाद, कर्सर ALR में जाता है (अंतिम रिकॉर्ड के बाद) और यह रिक्त करने के लिए सेट किया जाएगा। आइए देखें कि तालिका में 2 रिकॉर्ड हैं

 if(rs.next()==false){ // there are no records found } while (rs.next()==true){ // print all the records of the table } 

संक्षेप में, हम तब भी हालत लिख सकते हैं (rs.next ())।