2010-04-08 16 views
5

तक पहुंचने के लिए जावा प्रभावशाली रणनीति एक साधारण प्रश्न: जावा/जेडीबीसी में डीबी तक पहुंचने का अधिक प्रभावी तरीका क्या है? मैं एक वेब डेवलपर हूं और मैं कुछ पुन: प्रयोज्य और स्केलेबल कोड लिखना चाहता हूं।
मेरे लिए दिलचस्प क्या है ResultSupport जैसे टूल का उपयोग: संसाधन संसाधन के संदर्भ में यह बहुत व्यापक है?
आप क्या सुझाव दे सकते हैं?डीबी

उत्तर

5

सिर्फ JDBC विशिष्ट, सिर्फ सामान्य एसक्यूएल सामान

  1. आप एक प्रश्न कई बार फिर से चलाएं करने के लिए है, तो PreparedStatement का उपयोग करें। संग्रहीत प्रक्रिया का उपयोग करें यदि यह उपलब्ध है। यह स्पष्ट रूप से पोर्टेबल नहीं है इसलिए वाईएमएमवी।

  2. यदि आप इसका उपयोग नहीं कर रहे हैं तो हमेशा अपने परिणामसेट या स्टेटमेंट को बंद करें। एक वक्तव्य बंद करने से स्टेटमेंट से जुड़े सभी परिणामसेट को बंद कर दिया जाएगा। अभी भी परिणामसेट बंद करने की एक अच्छी आदत है।

  3. पूछे जाने वाले प्रश्नों को प्रतिबंधित करने का प्रयास करें उदाहरण के लिए। ऑर्डर से * चुनें जहां XXX और yy के बीच order_date। MySQL में क्वेरी कितनी डेटा लौटा दी जाती है, इस पर निर्भर करता है कि क्वेरी या तो पूर्ण तालिका स्कैन या 'रेंज' हो सकती है। तो यह तय करना कि आप कितने 'लचीली' को अपने प्रश्नों को

  4. यदि आप MySQL का उपयोग कर रहे हैं, तो अपनी क्वेरी को अनुकूलित करने के लिए व्याख्या का उपयोग करें। यदि आप जेपीए का उपयोग कर रहे हैं, तो आपको एसक्यूएल जेनरेट नहीं दिख रहा है। (यह कड़ाई से जेडीबीसी नहीं है) आप इस्तेमाल किए गए SQL कथन को प्रदर्शित करने के लिए ओआरएम प्रबंधक पर लॉगिंग सक्षम करना चाहेंगे। फिर इसे अनुकूलित करने के लिए व्याख्या का उपयोग करें।यदि आप ओआरएम वास्तव में एक ठोस क्वेरी उत्पन्न करता है तो आप @NamedNativeQuery का उपयोग करना चाह सकते हैं

  5. यदि आपका जेडीबीसी ड्राइवर बैच अपडेट का समर्थन करता है तो उसका उपयोग करें। बैच अपडेट तैयार किए गए स्टेटमेंट और परिणामसेट में समर्थित है।

  6. आप प्रतिबद्धता को भी नियंत्रित कर सकते हैं। यदि आप बहुत सारे अपडेट कर रहे हैं तो इसे बंद करने का अच्छा विचार। कॉल प्रतिबद्ध() स्वयं।

-1

मुझे लगता है कि सबसे आसान और सबसे आम तरीका Spring और उनके JDBCTemplate का उपयोग करना है।

सबसे अच्छा तरीका संभवतः उस स्टैक पर निर्भर करता है जिसका उपयोग आप अपने वेब ऐप को बनाने के लिए कर रहे हैं। यदि आप फिर से शुरू कर रहे हैं तो वसंत जाने का एक अच्छा तरीका है।

+0

और स्केलेबिलिटी के लिए, जेएनडीआई से देखा गया 'डेटासोर्स' पूल का उपयोग करें। – gustafc

0

हमेशा एक कनेक्शन पूल डेटासोर्स जैसे c3p0 का उपयोग करना बहुत महत्वपूर्ण है।

0

एक ऐसी परियोजना है जो जावा ऑब्जेक्ट्स को mysql डेटाबेस पर मैप करती है। Azirt.

0

उपयोग कनेक्शन पूलिंग (या तो अपने कंटेनर से एक या एक से c3p0 या DBCP की तरह एक स्टैंडअलोन कनेक्शन पूल) और DBUtils की तरह कुछ या वसंत के JdbcTemplate

1

इस सरल प्रश्न का सबसे अच्छा जवाब यह है: "यह निर्भर करता है"।

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

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

जैसा कि जेपीए सिर्फ एक विनिर्देश है, आप चुन सकते हैं कि आप अपना कार्यान्वयन कर रहे हैं: Hibernate, OpenJPA या कोई अनुपालन जावा ईई सर्वर।