कॉल करने योग्य विवरण इंटरफ़ेस संग्रहीत प्रक्रियाओं को निष्पादित करने के तरीके प्रदान करता है। चूंकि JDBC API एक संग्रहीत कार्यविधि SQL एस्केप सिंटैक्स प्रदान करता है, आप सभी RDBMS की संग्रहीत कार्यविधियों को एकल मानक तरीके से कॉल कर सकते हैं।
कॉल करने योग्य विवरण बनाना
आप CallableStatement . का एक ऑब्जेक्ट बना सकते हैं (इंटरफ़ेस) prepareCall() . का उपयोग करके कनेक्शन . की विधि इंटरफेस। यह विधि संग्रहीत कार्यविधि को कॉल करने के लिए एक क्वेरी का प्रतिनिधित्व करने वाले एक स्ट्रिंग चर को स्वीकार करती है और एक CallableStatement लौटाती है वस्तु।
कॉल करने योग्य कथन में इनपुट पैरामीटर, आउटपुट पैरामीटर या दोनों हो सकते हैं। प्रक्रिया कॉल में इनपुट पैरामीटर पास करने के लिए आप प्लेस होल्डर का उपयोग कर सकते हैं और CallableStatement इंटरफ़ेस द्वारा प्रदान की गई सेटर विधियों (setInt (), setString (), setFloat ()) का उपयोग करके इनके लिए मान सेट कर सकते हैं।
मान लीजिए कि आपके पास डेटाबेस में एक प्रक्रिया नाम myProcedure है, तो आप एक कॉल करने योग्य विवरण तैयार कर सकते हैं:
//एक CallableStatementCallableStatement तैयार करना cstmt =con.prepareCall("{call myProcedure(?,?, ?)}");
इनपुट पैरामीटर पर मान सेट करना
आप सेटर विधियों का उपयोग करके प्रक्रिया कॉल के इनपुट पैरामीटर में मान सेट कर सकते हैं।
ये दो तर्कों को स्वीकार करते हैं, एक इनपुट पैरामीटर के प्लेसमेंट इंडेक्स का प्रतिनिधित्व करने वाला एक पूर्णांक मान है और दूसरा एक int या, स्ट्रिंग या, फ्लोट इत्यादि है ... उस मान का प्रतिनिधित्व करता है जिसे आपको प्रक्रिया में asinput पैरामीटर पास करने की आवश्यकता होती है।
नोट: अनुक्रमणिका के बजाय आप पैरामीटर का नाम स्ट्रिंग प्रारूप में भी पास कर सकते हैं।
cstmt.setString(1, "राघव");cstmt.setInt(2, 3000);cstmt.setString(3, "Hyderabad");
कॉल करने योग्य विवरण निष्पादित करना
एक बार जब आप CallableStatement ऑब्जेक्ट बना लेते हैं, तो आप इसे execute() में से किसी एक का उपयोग करके निष्पादित कर सकते हैं। विधि।
cstmt.execute();
उदाहरण
मान लीजिए हमारे पास कर्मचारी . नाम की एक तालिका है निम्नलिखित डेटा के साथ MySQL डेटाबेस में:
<पूर्व>+------+--------+----------------+| नाम | वेतन | स्थान |+---------+----------+----------------+| अमित | 30000 | हैदराबाद || कल्याण | 40000 | विशाखापत्तनम || रेणुका | 50000 | दिल्ली || अर्चना | 15000 | मुंबई |+-----------+-----------+----------------+और हमने इस तालिका में मान डालने के लिए myProcedure नाम की एक प्रक्रिया बनाई है जैसा कि नीचे दिखाया गया है:
प्रक्रिया बनाएं myProcedure (नाम VARCHAR(30), IN साल INT, IN loc VARCHAR(45)) -> BEGIN -> INSERT INTO Employee(Name, Salary, Location) VALUES (नाम, साल, लोक); -> अंत //
निम्नलिखित एक JDBC उदाहरण है जो कॉल करने योग्य कथन का उपयोग करके उपरोक्त बनाई गई प्रक्रिया को कॉल करके कर्मचारी तालिका में नए रिकॉर्ड सम्मिलित करता है।
आयात करें ड्राइवर का पंजीकरण करना DriverManager.registerDriver(new com.mysql.jdbc.Driver()); // कनेक्शन प्राप्त करना स्ट्रिंग mysqlUrl ="jdbc:mysql://localhost/testdb"; कनेक्शन कॉन =DriverManager.getConnection (mysqlUrl, "रूट", "पासवर्ड"); System.out.println ("कनेक्शन स्थापित ......"); // एक कॉल करने योग्य स्टेटमेंट तैयार करना कॉल करने योग्य स्टेटमेंट cstmt =con.prepareCall ("{कॉल myProcedure (?,?,?)}"); cstmt.setString(1, "राघव"); cstmt.setInt(2, 3000); cstmt.setString(3, "हैदराबाद"); cstmt.setString(1, "कल्याण"); cstmt.setInt(2, 4000); cstmt.setString(3, "विशाखापत्तनम"); cstmt.setString(1, "रुक्मिणी"); cstmt.setInt(2, 5000); cstmt.setString(3, "दिल्ली"); cstmt.setString(1, "अर्चना"); cstmt.setInt(2, 15000); cstmt.setString(3, "मुंबई"); cstmt.execute (); System.out.println ("पंक्तियाँ डाली गई ...."); }}पूर्व>आउटपुट
कनेक्शन स्थापित हो गया...पंक्तियां डाली गईं ....
यदि आप चयनित क्वेरी का उपयोग करके कर्मचारी तालिका की सामग्री को पुनः प्राप्त करते हैं, तो आप नीचे दिखाए गए नए जोड़े गए रिकॉर्ड देख सकते हैं:
mysql> कर्मचारी से * चुनें; नाम | वेतन | स्थान |+---------+----------+----------------+| अमित | 30000 | हैदराबाद || कल्याण | 40000 | विशाखापत्तनम || रेणुका | 50000 | दिल्ली || अर्चना | 15000 | मुंबई || राघव | 3000 | हैदराबाद || राघव | 3000 | हैदराबाद || कल्याण | 4000 | विशाखापत्तनम || रुक्मिणी | 5000 | दिल्ली || अर्चना | 15000 | मुंबई |+-----------+-----------+----------------+9 पंक्तियों में सेट (0.00 सेकंड)