2012-04-26 12 views
6

मैं एक जावा फ़ंक्शन लिखना चाहता हूं जो SQL क्वेरी में लेता है और कहीं और प्रोसेसिंग के लिए परिणामसेट देता है। यह कनेक्शन बंद होने के बाद परिणामसेट के रूप में नहीं किया जा सकता है।कैशड्रॉवसेट: क्या इसका अभी भी परिणामसेट डेटा को पकड़ने के लिए उपयोग किया जा सकता है?

चारों ओर घूमते हुए मुझे VERY OLD (2004) OReilly article मिला जो कि इलाज की तरह दिखता था: CachedRowSet। आप बस अपने परिणामसेट में ड्रॉप करते हैं, कैशड्रोसेट डेटा को सहेजता है, जिससे आप कनेक्शन को बंद कर सकते हैं और लौटा कैशरोसेटसेट का उपयोग कर कहीं और डेटा के साथ खेल सकते हैं।

लेख सूर्य द्वारा कैशड्रोसेटसेट के कार्यान्वयन संदर्भों को संदर्भित करता है, जो कहीं भी नहीं पाए जाते हैं।

आधुनिक जावाडॉक्स (जावा 1.5 और ऊपर के लिए) के समान नाम, "कैशड्रोसेट", जो कि परिणामसेट डेटा के धारक से अधिक है, के समान कुछ प्रतीत होता है। ऐसा लगता है कि "कैशड्रोसेट" पूरे डेटाबेस प्रोसेसिंग को कनेक्शन और अन्य सभी चीज़ों से प्राप्त करने लगता है।

क्या यह "कैशरोवसेट" वही बात है जैसा पुराने लेख में बात की गई है?

मुझे पुराने लेख की तरह कुछ सरल चाहिए। कनेक्शन बंद होने के बाद प्रसंस्करण के लिए परिणाम परिणाम को प्लॉप करने के लिए कुछ।

क्या ऐसा कोई जानवर है?

धन्यवाद

उत्तर

-1

javax.sql.rowset.CachedRowSet महज एक इंटरफेस है। एक सूर्य/ओरेकल मालिकाना कार्यान्वयन है, लेकिन यह असमर्थित है और इस प्रकार उपयोग करने के लिए जोखिम भरा है।

इन दिनों अधिकांश कोड "pojos में कनवर्ट करें" मॉडल का पालन करता है।

+0

एमबीएफजी; मैं ओरेकल का उपयोग कर रहा हूं और मैं इसे एक अस्थायी उपाय के रूप में उपयोग करने की उम्मीद कर रहा था, जबकि मैं कुछ विरासत कोड साफ़ करता हूं और चीजों को डाटाबेस (डेटाबेस ढांचे, आदि) करने का बेहतर तरीका सीखता हूं। मैं इसे कहां प्राप्त करने के बारे में कुछ भी नहीं ढूंढ पाया, इसका उपयोग कैसे करें। अधिक गुगलिंग से परे कोई सुराग? – Steve

+0

pojos का उपयोग करके "परिणामसेट" को उस फ़ंक्शन के बाहर स्क्रॉल करने के लिए कैसे बदला जा सकता है जहां इसे प्राप्त किया गया था? – Steve

+1

आपको क्या लगता है कि 'com.sun.rowset.CachedRowSetImpl' असमर्थित है? [कैशड्रोसेट इंटरफ़ेस] (http://docs.oracle.com/javase/7/docs/api/javax/sql/rowset/CachedRowSet।एचटीएमएल) जावा 7 में है, और इसके जावाडोक कहते हैं कि "ओरेकल कॉर्पोरेशन द्वारा प्रदान किए गए कैशड्रोसेट इंटरफ़ेस का संदर्भ कार्यान्वयन एक मानक कार्यान्वयन है। डेवलपर्स इस कार्यान्वयन का उपयोग उसी तरह कर सकते हैं"। संदर्भ कार्यान्वयन 'com.sun.rowset.CachedRowSetImpl' है; यह मेरे लिए असमर्थित नहीं है। –

-1

यदि आप केवल कैश किए गए सभी कार्यों की आवश्यकता के बिना डेटा स्थानांतरित करना चाहते हैं, तो आप केवल सूची सेट डेटा को सूची सूची में डालने से बेहतर हैं।

List<Object> list = new ArrayList<Object>(); 
    ResultSet rs = stmt.executeQuery("select * from myTable"); 
    while(rs.next()) { 
     List<Object> row = new ArrayList<Object>(); 
     row.add(rs.getObject(1)); 
     row.add(rs.getObject(2)); 
     row.add(rs.getObject(3)); 
     //And so on, or you can use the ResultSetMetaData to determine the number of columns 
     list.add(row); 
    } 
    rs.close(); 

जब आप पूरा कर लेंगे तो आप उस सूची वस्तु को कहीं भी भेज सकते हैं और फिर डेटा प्राप्त करने के लिए इसके माध्यम से फिर से भर सकते हैं।

4

CachedRowSet एक मानक जावा इंटरफ़ेस है। सूर्य ने एक संदर्भ कार्यान्वयन लिखा, और Sun/Oracle JDK contains it। यदि आप एक अलग जेडीके का उपयोग कर रहे हैं, तो वह या कोई अन्य कार्यान्वयन उपलब्ध हो सकता है या नहीं भी हो सकता है।

यदि आपके पास पहले से ResultSet है, तो आप populate विधि का उपयोग कर CachedRowSet भर सकते हैं।

यदि आपके पास पर्याप्त आगे की सोच रहे हैं, तो जावा 7 का उपयोग किया जाना है, तो आप एक CachedRowSet उदाहरण एक पोर्टेबल तरह से प्राप्त कर सकते हैं, एक RowSetFactory है, जो एक createCachedRowSet विधि है का उपयोग कर। आप RowSetProvider (बेशक!) से RowSetFactory प्राप्त कर सकते हैं।

संबंधित मुद्दे

 संबंधित मुद्दे