2010-02-18 14 views
6

मेरे पास दो परिणाम सेट हैं (rs1 और rs2) एक ही फ़ील्ड हैं। अब उन दो परिणाम सेट को एक में कैसे गठबंधन करें ताकि डुप्लिकेट पंक्तियां एक बार दिखाई दें।जावा में दो परिणामसेट्स को कैसे गठबंधन करें?

उत्तर

11

यदि दो ResultSet एस एक ही डेटाबेस से हैं तो union का उपयोग कर पुनर्प्राप्ति के दौरान उन्हें क्यों न जोड़ें; जैसे

select A, B 
from C 
union 
select A, B 
from D 

हालांकि, समानता के लिए तुलना करने के लिए अगर यह एक विकल्प तो मैं एक वर्ग को परिभाषित करने के लिए एक पंक्ति अपने ResultSet से निकाला प्रतिनिधित्व करने के लिए और equals/hashCode को लागू करने की अनुमति देने के करने का सुझाव नहीं है। फिर डुप्लिकेट को हटाने के लिए प्रत्येक को Set (उदा। HashSet) में जोड़ें।

+1

+1 ... अच्छा जवाब ... बहुत सटीक और बिंदु पर ... अगर आपके पास अधिकार थे तो मैं आपको 10 बार उखाड़ दूंगा। –

+2

यूनियन डुप्लिकेट को हटा देता है, एक प्रकार को मजबूर करता है। यूनियन सभी कार्यात्मक रूप से परिणाम सेट को जोड़ता है। यदि डुप्लिकेट स्वीकार्य हैं या आप जानते हैं कि दो परिणाम सेटों में कोई ओवरलैप नहीं है, तो यूनियन ऑल का उपयोग करें। –

+0

@Adam: ओपी ने पहले ही कहा है कि वह डुप्लिकेट पंक्तियों को केवल एक बार दिखाया जाना चाहता था, इसलिए मैंने यूनियन के बजाय यूनियन का उल्लेख क्यों किया। – Adamski

3

आप कर सकते हैं:

  1. एक वर्ग स्तंभों के लिए इसी
  2. क्षेत्रों जिसके द्वारा आप को परिभाषित का उपयोग कर "नकल" equals() और hashCode() तरीकों को लागू गुण है कि बनाएँ (चलो अपने आईडीई के साथ मदद इनमें से पीढ़ी)
  3. createa एक Set (HashSet):

    सेट combinedDataSet = नए HashSet();

  4. दोहराएं प्रत्येक ResultSet, और निर्माण वस्तुओं:

    while (rs1.next) { 
        YourClass obj = new YourClass(); 
        obj.setSomeProperty(rs.getString(1)); 
        obj.setAnotherProperty(rs.getString(2)); 
        // etc.. 
        cominbedDataSet.add(obj); 
    } 
    

    ही यात्रा rs2

के लिए चला जाता है केवल मामले में इस क्या आप एक के माध्यम से वांछित परिणाम नहीं मिल सकता है एसक्यूएल क्वेरी!

+0

+1 ... .......... :) –

+0

@ बोझो मैं आपके साथ संवाद करना चाहता हूं। मेरे पास कोई प्रोग्रामिंग समस्या नहीं है जिसे मैं यहां पोस्ट कर सकता हूं। आपने मेरे विभिन्न प्रश्नों का उत्तर दिया है और इस प्रकार, मुझे पता है कि आप मेरे करियर के लिए सलाह लेने के लिए सही व्यक्ति हैं। मैंने आपके ब्लॉग को भी चेक किया लेकिन आपके साथ संवाद करने का कोई तरीका नहीं मिला। मैं आपके साथ संवाद करने के लिए एसओ का उपयोग नहीं करना चाहता क्योंकि यह गलत होगा। अगर आप मुझे अपने बहुमूल्य समय से कुछ समय दें और मुझे बताएं कि मैं आपके साथ कैसे बात कर सकता हूं तो मैं आपके लिए बहुत आभारी हूं। धन्यवाद। –

+1

@ यतेन्द्र गोयल यदि आपके पास विशेष प्रश्न हैं, तो उन्हें SO पर पूछें। यदि आपके पास कम-से-कम प्रश्न हैं, तो मेरे ब्लॉग (यहां मेरी प्रोफ़ाइल में लिंक) देखें और मुझे एक टिप्पणी छोड़ दें। – Bozho

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