java - Good practices: JDBC Connection -


संभव डुप्लिकेट:

मैंने जेडीबीसी कनेक्शन के लिए एक सरल आवरण लिखा है और यह काम करता है लेकिन मैं इसे यथासंभव बेहतरीन अभ्यासों के साथ बेहतर बनाना चाहता हूं। यह मूल रूप से open () , close () , आयनित () , चुनें () , < कोड> सम्मिलित करें () , अपडेट () , हटाएं () और बैच () । सादगी के लिए मैं केवल पहली 4 विधियों को यहां पोस्ट करूंगा।

  सार्वजनिक वर्ग प्रश्न {निजी कनेक्शन कॉन; प्राइवेट तैयार निजी परिणाम रुसेट; //Database.open () सार्वजनिक रिक्त खुला (डाटाबेस डाटाबेस) का उपयोग करने के लिए एक कनेक्शन तैयार करता है, डाटाबेसएक्सेप्शन, एसक्यूएलक्सेप्शन को फेंकता है {if (! (आइसओपेंड ()) {con = database.open ()); }} सार्वजनिक शून्य बंद () SQLException फेंकता {यदि (आइसोपन ()) {if (ps! = Null) ps.close (); Con.close (); कॉन = नल; }} सार्वजनिक बूलियन आईओपेंड () {वापसी सह! = नल; } // क्वेरी स्ट्रिंग "चयन" शब्द के बिना क्वेरी है और वे प्लेसहोल्डर्स (?) // का उपयोग कर सकते हैं। द एल्ग्स परम यह इस प्लेसहोल्डर्स के मान के साथ एक सरणी है, सार्वजनिक परिणामस्वरूप चुनें (स्ट्रिंग क्वेरी, ऑब्जेक्ट [] एआरजीज़) फेंकता है SQLException {if (ps! = Null) ps.close (); यदि (आइसोपन ()) {ps = con.prepareStatement ("चुनें" + क्वेरी); If (args! = Null) {for (int i = 0; i & lt; args.length; i ++) {ps.setObject (i + 1, args [i]); }} Rs = ps.executeQuery (); } रिटर्न आरएस; }}   

नोट्स:

  • एक ही क्वेरी ऑब्जेक्ट का पुन: उपयोग किया जा सकता है, उदाहरण के लिए इसे खोलना और बंद करने, और दोबारा खोलने के बाद। < Li> मैं हर क्वेरी के लिए कनेक्शन बंद नहीं कर रहा हूँ, मैं अभी तैयार कथन बंद कर रहा हूं (यह सही है या मैं तैयार कथन को छोड़ सकता हूँ क्योंकि कनेक्शन वस्तु इसे बंद कर देगी?)
  • जब मैं कनेक्शन को बंद कर देता हूं, सभी तैयार किए गए स्थान s और उनका ResultSet s भी बंद हैं, सही?

    उपयोग:

      डेटाबेस डेटाबेस; // डाटाबेस आरंभीकरण क्वेरी क्वेरी = नई क्वेरी (); Query.open (डेटाबेस); ResultSet rs = query.select ("* उपयोगकर्ता से जहां नाम =?", नई स्ट्रिंग [] {"MyName"}); DoSomethingWithResult1 (आरएस); // कनेक्शन यहाँ बंद नहीं है ResultSet rs = query.select ("से समन्वय बिंदु जहां समन्वय =? और समन्वय =?", नया फ़्लोट [] {0.1, 0.2}); DoSomethingWithResult2 (आरएस); Query.close (); Query.open (डेटाबेस); ResultSet rs = query.select ("* उपयोगकर्ता से जहां नाम =?", नई स्ट्रिंग [] {"MyName"}); DoSomethingWithResult1 (आरएस); // कनेक्शन यहाँ बंद नहीं है ResultSet rs = query.select ("से समन्वय बिंदु जहां समन्वय =? और समन्वय =?", नया फ़्लोट [] {0.1, 0.2}); DoSomethingWithResult2 (आरएस); Query.close ();   

    आपको क्या लगता है? क्या मुझे हर क्वेरी के बाद कनेक्शन को बंद करना और खोलना चाहिए? क्या मैं एक ही कनेक्शन पर प्रत्येक क्वेरी के बाद तैयार किए गए स्थान को खोल सकता हूं? यह एक अच्छा डिजाइन है?

    आपको इसके साथ और आपके सामने किया गया पूरा होने के बाद तैयार करना बंद करना होगा एक ही कनेक्शन पर एक नया बनाएँ। मेरे पास गंभीर समस्याएं थीं क्योंकि मैंने तैयार स्तरों को बंद नहीं किया था यह पता चला है कि डाटाबेस सर्वर पर संसाधनों को आवंटित किए गए थे जो कि केवल तैयार किए गए स्टार्टिडेट.कोज () के स्पष्ट कॉल के बाद मुक्त होते हैं।

    जैसा कि bdares ने टिप्पणी की, कनेक्शन को खोला जाना चाहिए और इसे जितनी संभव हो उतनी बंद नहीं किया जाना चाहिए।

Comments

Popular posts from this blog

mysql - BLOB/TEXT column 'value' used in key specification without a key length -

c# - Using Vici cool Storage with monodroid -

python - referencing a variable in another function? -