2010-08-18 19 views
9

मैं जावा में नया हूं और बस डेटाबेस पूछताछ कर रहा हूं। अब तक मेरे परिणाम परिणाम SetMetaData में हैं। मुझे लगता है कि डेटासेट में प्रत्येक पंक्ति के लिए मुझे इसे किसी संग्रह के रूप में जोड़ना चाहिए? क्या कोई मुझे इसके लिए सबसे अच्छा अभ्यास बता सकता है?तालिका पंक्तियों को रखने के लिए मुझे किस प्रकार की डेटा संरचना का उपयोग करना चाहिए?

धन्यवाद,
Jonesy

+0

आपका परिणाम एक ResultSet के बजाय एक ResultSetMetaData में होने की संभावना है के बारे में अधिक पढ़ सकते हैं। –

उत्तर

6

आमतौर पर हमारे पास एक टेबल के साथ फ़ील्ड वाले वर्ग होते हैं। फिर, जब भी हमारे पास परिणाम सेट में एक (पूर्ण) पंक्ति होती है, तो हम इस वर्ग का एक उदाहरण बनाते हैं।

उदाहरण:

CREATE TABLE customer (First_Name char(50), Last_Name char(50), 
    Address char(50), City char(50), Country char(25), Birth_Date date); 

एक मॉडल वर्ग इस तरह होगा::

इस तरह निर्मित तालिका पर विचार करें

public class Customer { 
    private String firstName; 
    private String lastName; 
    private String address; 
    private String city; 
    private String country; 
    private Date date; 


    public String getFirstName() { 
    return firstName; 
    } 
    // getters for all fields 

    public void setFirstName(String firstName) { 
    this.firstName = firstName; 
    } 
    // setters for all fields 

    public String toString() { 
    return String.format("[%s, %s, %s, %s, %s, %s]", firstName, 
      lastName, address, city, country, date); 
    } 
} 

अब अगर आप डेटा पढ़ सकते हैं और एक ResultSet है , आप एक नया ग्राहक ऑब्जेक्ट बनायेंगे और फ़ील्ड सेट करेंगे:

List<Customer> customers = new ArrayList<Customer>(); 
ResultSet rs = stmt.executeQuery("SELECT * from CUSTOMER;"); 
while (rs.next()) { 
    Customer customer = new Customer(); 
    customer.setFirstName(rs.get("First_Name")); 
    // ... and so on 

    customers.add(customer); 
} 
+0

इस स्थिति में क्या क्वेरी को ऑब्जेक्ट निर्माण कोड के समान श्रेणी में होना चाहिए? – iamjonesy

+0

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

+0

ठीक है धन्यवाद, अगर आपको कोई फर्क नहीं पड़ता तो एक और सवाल। एक बार मैंने प्रत्येक रिकॉर्ड का ऑब्जेक्ट बनाया है। उस वस्तु के साथ मैं किस तरह की चीजें कर सकता हूं? आम तौर पर यह है .. – iamjonesy

5

एक List काफी तार्किक लगता है। यदि आपके पास डुप्लीकेट नहीं होने जा रहे हैं, और आप परिणामों के क्रम के बारे में परेशान नहीं हैं, तो शायद Set

List का एक प्रासंगिक कार्यान्वयन:

  • ArrayList: यह एक सरणी के द्वारा समर्थित है, तो विशेष रूप से सूचकांक पर लुकअप त्वरित Set की

प्रासंगिक कार्यान्वयन होना चाहिए:

  • HashSet: HashMap द्वारा समर्थित O(1) प्रविष्टि समय
  • TreeSet: डेटा (compareTo पद्धति का उपयोग करके) के आदेश का सम्मान - तो डेटा पर पुनरावृत्ति के क्रम में होगा - व्यापार बंद O(log n) प्रविष्टि समय
1

है आप वर्ग प्रतिनिधित्व करता है जो बना सकते हैं असली दुनिया इकाइयों। बाद में यदि आप ओआरएम तकनीक/उपकरण चुनना चाहते हैं जैसे हाइबरनेट आप समान कक्षाओं का उपयोग कर सकते हैं।

8

डेटा को पकड़ने के लिए कोई ऑब्जेक्ट बनाएं। परिणाम के माध्यम से लूप, प्रत्येक के लिए एक ऑब्जेक्ट बनाना, और उन्हें डेटा का उपयोग करना चाहते हैं, इस पर निर्भर करता है कि उन्हें एक ऐरेलिस्ट या हैश मैप में स्टोर करें। यह आपको डेटाबेस को बंद करने की अनुमति देता है, और यह आपको अच्छी वस्तुएं देता है जिस पर आप डेटा को कुशल बनाने के तरीकों का निर्माण कर सकते हैं।

यह आपको उस कोड का उपयोग करने की अनुमति देता है जो उस ऑब्जेक्ट का उपयोग करता है जिसे डेटाबेस पर भरोसा करने की आवश्यकता नहीं है। यदि आप कभी भी डेटाबेस को बाद में खींचना चाहते हैं और टेक्स्ट फ़ाइलों या जो कुछ भी स्विच करना चाहते हैं, तो करना आसान है और आप अभी भी वही ऑब्जेक्ट्स और विधियों का उपयोग कर सकते हैं।

+0

धन्यवाद एरिक। मेरे पास उपयोगकर्ताओं की एक टेबल है। मैंने उपयोगकर्ताओं को पुनर्प्राप्त करने के लिए एक कन्स्ट्रक्टर के साथ DisplayUsers नामक एक कक्षा बनाई है। प्रत्येक उपयोगकर्ता के लिए लौटाए जाने के लिए क्या मुझे कक्षा उपयोगकर्ता का एक नया ऑब्जेक्ट बनाना चाहिए? – iamjonesy

+0

हाँ, डेटाबेस तालिका में फ़ील्ड के समान गुणों में कुछ ऐसा ही समझ में आता है। साथ ही, आमतौर पर, ऑब्जेक्ट का नाम डेटाबेस तालिका के नाम से बहुत समान होता है। मैं एक अलग डेटाबेस क्लास का उपयोग करता हूं जो डेटा प्रकारों के लिए स्रोत इंटरफेस लागू करता है जिन्हें मैं खींचना चाहता हूं। लेकिन मैं विभिन्न मॉड्यूल के लिए डेटाबेस का बहुत भारी उपयोग करता हूं और मैं स्रोत-अज्ञेयवादी बनना चाहता हूं। –

1

सबसे पहले, ResultSetMetaData कक्षा में "परिणामसेट ऑब्जेक्ट में कॉलम के प्रकारों और गुणों के बारे में जानकारी" है। तो आपकी क्वेरी के परिणाम परिणामसेट में हैं, न कि ResultSetMetaData ऑब्जेक्ट में।

आप परिणाम डेटा से अपने डेटा को निकालने के तरीके के बारे में जानकारी के लिए Retrieving Values from Result Sets जावा ट्यूटोरियल देख सकते हैं। परिणामस्वरूप आप डेटा को कैसे एक्सेस करना चाहते हैं, इस पर निर्भर करते हुए आपको परिणामसेट के माध्यम से केवल लूप करने में सक्षम होना चाहिए और अपने रिकॉर्ड को सूची या मानचित्र में रखना चाहिए।

1

मैं आमतौर पर एंड्रॉइड_D के वर्णन के समान पैटर्न का पालन करता हूं।

ऑब्जेक्ट प्रत्येक डेटा की डेटा (इस मामले में, ग्राहक वर्ग) को डेटा ट्रांसफर ऑब्जेक्ट (TO) के रूप में संदर्भित करता है।

कोड जो डेटाबेस कनेक्शन प्राप्त करता है, डीबी से पूछताछ करता है, टीओएस को पॉप्युलेट करता है और उन्हें (आमतौर पर एक सूची में) लौटाता है, जिसे डेटा एक्सेस ऑब्जेक्ट (डीएओ) के रूप में जाना जाता है।

आप इस डिजाइन पैटर्न here

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

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