"केवल एक बार परिणाम प्रति बुलाया जाना चाहिए", यह कहते हैं:getResultSet() <code>java.sql.Statement</code> में <code>getResultSet</code> के लिए <a href="http://docs.oracle.com/javase/1.5.0/docs/api/java/sql/Statement.html" rel="nofollow noreferrer">documentation</a> के अनुसार
एक ResultSet वस्तु के रूप में वर्तमान परिणाम पुन: प्राप्त करता। इस विधि को प्रति परिणाम केवल एक बार बुलाया जाना चाहिए।
कुछ परीक्षण कोड का उपयोग करना, मैं getResultSet()
को executeQuery()
और कई कॉल भाग गया और कहा कि ResultSet
लौटे एक ही वस्तु की ओर इशारा किया। तो मुझे लगता है कि यह एक अलग ResultSet
वापस नहीं कर रहा है जिसे आपको व्यक्तिगत रूप से बंद करने की आवश्यकता होगी। लेकिन निश्चित रूप से यह मेरे जेडीबीसी ड्राइवरों के लिए अद्वितीय हो सकता है।
ResultSet
के लिए documentation को देखते हुए यह कहते हैं:
एक डिफ़ॉल्ट ResultSet वस्तु updatable नहीं है और एक कर्सर कि चाल आगे केवल है। इस प्रकार, आप केवल पहली पंक्ति से केवल अंतिम पंक्ति तक केवल एक बार और के माध्यम से इसे फिर से चला सकते हैं।
यह एक अच्छा कारण प्रतीत होता है कि इसे कई बार कॉल करने का अच्छा विचार क्यों नहीं हो सकता क्योंकि इससे कुछ "गॉचा" स्थिति हो सकती है। अगर यह एकमात्र कारण था, तो मुझे लगा कि वे सिर्फ इतना कह सकते थे कि इसलिए मुझे लगता है कि इससे कहीं अधिक हो सकता है।
तो क्या किसी को पता है कि किसी को प्रति परिणाम एक से अधिक बार getResultSet
क्यों नहीं कॉल करना चाहिए? यह question है जो मुझे पहले स्थान पर उत्सुक बना देता है।
इसे उत्तर के रूप में पोस्ट नहीं करना क्योंकि यह केवल एक झटका है, लेकिन मुझे संदेह है कि यह जेडीबीसी चालक डेवलपर्स को कुछ छूट देने का तरीका है, जिससे उन्हें परिभाषित नहीं किया जाता है कि जब आप इसे एक से अधिक बार कॉल करते हैं तो क्या होता है। आपके विशेष मामले में यह काम करता है, लेकिन यदि आपने कभी जेडीबीसी ड्राइवरों को स्विच किया है तो शायद यह नहीं हो सकता है। –
मुझे लगता है कि यह उतना आसान है जितना: परिणामसेट ऑब्जेक्ट में राज्य है। वक्तव्य के सदस्य के रूप में केवल एक परिणामसेट वस्तु है। ऑब्जेक्ट प्राप्त करना कथन को फिर से निष्पादित नहीं करता है। ऑब्जेक्ट को दूसरी बार प्राप्त करना उसी स्थिति में होने की गारंटी नहीं है क्योंकि पहले प्राप्त होने के बाद आपने कुछ संशोधित किया है। तो यह सिर्फ एक सावधानी है। पोस्ट्रेस jdbc ड्राइवर (org.postgresql.jdbc2.AbstractJdbc2Statement) में देख रहे हैं, हम देख सकते हैं कि आंतरिक रूप से यह इस तरह की कई कॉल करता है: वापसी (परिणाम! = Null && result.getResultSet()! = Null); – Glenn