बयानों के प्रकार
हमने पहले ही सबसे सरल Statement इंटरफ़ेस देखा है । और हालांकि यह काम के लिए काफी उपयुक्त है, यह जटिल प्रश्नों के लिए इतना उपयुक्त नहीं है। कुछ स्रोतों में, राय व्यक्त की जाती है कि कथन का उपयोग करना बिल्कुल भी आवश्यक नहीं है - इसके बजाय अधिक जटिल और अधिक कार्यात्मक रूप से समृद्ध इंटरफेस उपयुक्त हैं।
- तैयार बयान
- कॉल करने योग्य स्टेटमेंट
एक काफी वाजिब सवाल उठता है - इन इंटरफेस की जरूरत क्यों है? आइए इसका पता लगाते हैं।
सबसे पहले, हम तैयार किए गए इंटरफ़ेस और अन्य JDBC सुविधाओं पर एक नज़र डालेंगे। हम बाद में CallableStatement इंटरफ़ेस की ओर मुड़ेंगे - इसका उपयोग, सबसे पहले, इतना सामान्य नहीं है, और दूसरी बात, इसके बारे में सब कुछ विचार करने के बाद, बातचीत पहले से ही काफी कम हो सकती है।

साथ ही, SQL इंजेक्शन नामक डेटाबेस हैकिंग के लोकप्रिय दृष्टिकोण से तैयार किया गया स्टेटमेंट एक बड़ी मदद है।
लेकिन उस पर थोड़ी देर बाद।
तैयार बयान
यदि आप नाम का अनुवाद करने का प्रयास करते हैं , तो आप "तैयार कथन" जैसा कुछ प्राप्त कर सकते हैं। यहाँ सबसे महत्वपूर्ण शब्द "तैयार" है। "तैयारी" क्या है?
इससे पहले कि हम इस मुद्दे पर विचार करें, मैं सुविधा के दृष्टिकोण से एक महत्वपूर्ण बिंदु देखने का प्रस्ताव करता हूं, जो बहुत बार होता है। इसलिए, कुछ एप्लिकेशन में, हमें कॉन्टैक्ट टेबल में कॉन्टैक्ट डेटा डालने की जरूरत होती है। ऐसा करने के लिए, हमें इस तरह की एक क्वेरी तैयार करने की आवश्यकता है:
INSERT INTO JC_CONTACT (FIRST_NAME, LAST_NAME, PHONE, EMAIL) VALUES (‘Harry’,'Potter','+79112345678','harry@example.com);
पहली नज़र में ऐसा लगता है कि सब कुछ इतना मुश्किल और डरावना नहीं है। हमें एक कोड लिखने की जरूरत है जो पैरामीटर से हमें आवश्यक स्ट्रिंग एकत्र करेगा: पहला नाम, अंतिम नाम, पता और फोन नंबर। आपको केवल यह याद रखने की आवश्यकता है कि सभी स्ट्रिंग डेटा को एक एकल उद्धरण वर्ण से घिरा होना चाहिए।
यदि हम इसे एक अलग कार्य में करते हैं, तो हमें ऐसा कुछ मिलता है:
public String buildInsert(String firstName,, String lastName, String phone, String email) {
String sql = "INSERT INTO JC_CONTACT (FIRST_NAME, LAST_NAME, PHONE, EMAIL) “+
”VALUES ('" + firstName + "','" + lastName + "','" + phone + "','" + email + ")";
return sql;
}
हम फॉर्म में पैरामीटर फ़ंक्शन में पहला नाम, अंतिम नाम, फ़ोन नंबर और पता पास करते हैं, और उनसे हम एक SQL क्वेरी स्ट्रिंग बनाते हैं। उद्धरण चित्र को थोड़ा खराब करते हैं, लेकिन अभी तक यह डरावना नहीं है।
ठीक है, संख्याओं के बारे में क्या? उन्हें उद्धरणों से घिरे रहने की आवश्यकता नहीं है। वैसे, एक मामले में आपको उद्धरणों की आवश्यकता होती है, दूसरे में आपको नहीं। स्थिति और जटिल होती जा रही है।
अब एक और समस्या जोड़ते हैं - क्या होगा यदि स्ट्रिंग के अंदर एक सामान्य उद्धरण (और एक भी नहीं) है? आपको पहले ऐसे उद्धरणों की तलाश करनी चाहिए और उन्हें संसाधित करना चाहिए। मदा। किसी तरह हम असहज महसूस करने लगते हैं।
अगर अब हम डेट प्रोसेसिंग को जोड़ दें, तो काम पूरी तरह से उबाऊ हो जाता है - आपको भारी मात्रा में काम करना पड़ता है। तिथियां आम तौर पर अप्रिय होती हैं - विभिन्न SQL सर्वर तिथियों के लिए विभिन्न स्वरूपों को स्वीकार करते हैं।
तो हम क्या देखते हैं? यदि हमें क्वेरी के अंदर मापदंडों का उपयोग करने की आवश्यकता है, तो मैन्युअल रूप से क्वेरी बनाना बहुत अप्रिय हो जाता है। और न सिर्फ अप्रिय - मैं उबाऊ भी कहूंगा। विचार करने के लिए बड़ी संख्या में मामले हैं, और यह बहुत ही उबाऊ काम है। मूल रूप से, ऐसे मामलों के लिए ही ReadyedStatement इंटरफ़ेस प्रस्तावित किया गया था ।
यह अनुरोध आपको दो काम करने की अनुमति देता है:
- उन स्थानों को इंगित करते हुए अग्रिम में एक अनुरोध तैयार करें जहां पैरामीटर प्रतिस्थापित किए जाएंगे
- एक निश्चित प्रकार के पैरामीटर सेट करें और फिर पहले से सेट किए गए पैरामीटर के साथ एक क्वेरी निष्पादित करें
तैयार कथन उदाहरण
पैरामीटर सेट करने के हमारे विकल्प के लिए तैयार किए गए स्टेटमेंट की संरचना इस तरह दिखाई देगी:
// Example variables
String firstName = "Harry";
String lastName = "Potter";
String phone = "+12871112233";
String email = "harry@example.com";
// Request with indication of places for parameters in the form of "?"
String sql = "INSERT INTO JC_CONTACT (FIRST_NAME, LAST_NAME, PHONE, EMAIL) VALUES (?, ?, ?, ?)";
// Create a request. The con variable is an object of type Connection
PreparedStatement stmt = con.prepareStatement(sql);
// Set parameters
stmt.setString(1, firstName);
stmt.setString(2, lastName);
stmt.setString(3, phone);
stmt.setString(4, email);
// Execute the request
stmt.executeUpdate();
जैसा कि आप देख सकते हैं, सब कुछ काफी सरल है।
सबसे पहले, SQL क्वेरी लिखते समय, जिन स्थानों पर मापदंडों को प्रतिस्थापित करने की आवश्यकता होगी, उन्हें प्रश्न चिह्न - "?" के साथ लिखा जाएगा।
दूसरा, अनुरोध con.prepareStatement() को कॉल करके बनाया गया है ।
तीसरा, मापदंडों की सेटिंग संख्या और मूल्य के संकेत के माध्यम से होती है। कृपया ध्यान दें कि मापदंडों की संख्या 1 से शुरू होती है, 0 से नहीं, जैसा कि हम सरणियों और संग्रह के साथ काम करते समय करते थे।
रेडीस्टेडमेंट इंटरफ़ेस में स्ट्रिंग सेट करने के तरीके हैं - सेटस्ट्रिंग () , नंबर सेट करने के लिए - सेटइन्ट () , सेटलॉन्ग () , सेटडबल () , दिनांक सेट करने के लिए - सेटडेट () । और अधिक जटिल प्रकार - यह प्रलेखन में देखा जा सकता है।
चौथा, stmt.executeUpdate() को कॉल पहले से ही क्वेरी स्ट्रिंग निर्दिष्ट किए बिना निष्पादित किया गया है।
मैं रेडीस्टेटमेंट के साथ दोस्ती करने की पुरजोर सलाह देता हूं - यह एक बहुत प्रभावी टूल है।
GO TO FULL VERSION