PreparedStatement इंटरफेस Statement इंटरफेस को एक्सटेंड करता है यह एक प्रीकंपाइल्ड SQL स्टेटमेंट को दर्शाता है जिसे कई बार एक्जीक्यूट किया जा सकता है। यह पैरामीटराइज्ड SQL क्वेरीज़ स्वीकार करता है और आप इस क्वेरी में 0 या अधिक पैरामीटर पास कर सकते हैं।
प्रारंभ में यह स्टेटमेंट पैरामीटर्स के स्थान पर प्लेसहोल्डर्स "?" का उपयोग करता है, बाद में आप PreparedStatement इंटरफेस के setXXX() मेथड्स का उपयोग करके इनमें डायनामिकली आर्गुमेंट्स पास कर सकते हैं।
PreparedStatement बनाना
आप Connection इंटरफेस के prepareStatement() मेथड का उपयोग करके PreparedStatement (इंटरफेस) का ऑब्जेक्ट बना सकते हैं। यह मेथड एक क्वेरी (पैरामीटराइज्ड) स्वीकार करता है और एक PreparedStatement ऑब्जेक्ट लौटाता है।
जब आप इस मेथड को इनवोक करते हैं, तो Connection ऑब्जेक्ट दी गई क्वेरी को डेटाबेस में कंपाइल और सेव करने के लिए भेजता है। यदि क्वेरी सफलतापूर्वक कंपाइल हो जाती है तभी यह ऑब्जेक्ट लौटाता है।
क्वेरी कंपाइल करने के लिए, डेटाबेस को किसी वैल्यू की आवश्यकता नहीं होती है इसलिए आप क्वेरी में वैल्यूज़ के स्थान पर (शून्य या अधिक) प्लेसहोल्डर्स (क्वेश्चन मार्क्स "?") का उपयोग कर सकते हैं।
उदाहरण के लिए, यदि डेटाबेस में Employee नाम की एक टेबल है, जिसे निम्नलिखित क्वेरी का उपयोग करके बनाया गया है:
CREATE TABLE Employee(Name VARCHAR(255), Salary INT NOT NULL, Location VARCHAR(255));
तब आप इसमें वैल्यू इन्सर्ट करने के लिए Prepared Statement का उपयोग कर सकते हैं जैसा कि नीचे दिखाया गया है:
// Prepared Statement बनाना String query = "INSERT INTO Employee(Name, Salary, Location) VALUES (?, ?, ?)"; PreparedStatement pstmt = con.prepareStatement(query);
प्लेसहोल्डर्स में वैल्यू सेट करना
PreparedStatement इंटरफेस setInt(), setFloat(), setArray(), setDate(), setDouble() आदि जैसे कई सेटर मेथड्स प्रदान करता है ताकि प्रीपेयर्ड स्टेटमेंट के प्लेसहोल्डर्स में वैल्यू सेट की जा सके।
ये मेथड्स दो आर्गुमेंट्स स्वीकार करते हैं, एक प्लेसहोल्डर के प्लेसमेंट इंडेक्स को दर्शाने वाला इंटीजर वैल्यू है और दूसरा वह int, String, float आदि है जिसे आप उस विशेष पोजीशन पर इन्सर्ट करना चाहते हैं।
आप उपरोक्त बनाए गए स्टेटमेंट के प्लेसहोल्डर्स में सेटर मेथड्स का उपयोग करके वैल्यू सेट कर सकते हैं जैसा कि नीचे दिखाया गया है:
pstmt.setString(1, "Amit"); pstmt.setInt(2, 3000); pstmt.setString(3, "Hyderabad"); pstmt.setString(1, "Kalyan"); pstmt.setInt(2, 4000); pstmt.setString(3, "Vishakhapatnam"); pstmt.setString(1, "Renuka"); pstmt.setInt(2, 5000); pstmt.setString(3, "Delhi"); pstmt.setString(1, "Archana"); pstmt.setInt(2, 15000); pstmt.setString(3, "Mumbai");
Prepared Statement एक्जीक्यूट करना
एक बार PreparedStatement ऑब्जेक्ट बनाने के बाद, आप इसे PreparedStatement इंटरफेस के execute() मेथड्स में से किसी एक का उपयोग करके एक्जीक्यूट कर सकते हैं: execute(), executeUpdate() और executeQuery()।
execute(): यह मेथड करंट प्रीपेयर्ड स्टेटमेंट ऑब्जेक्ट में सामान्य स्टैटिक SQL स्टेटमेंट्स एक्जीक्यूट करता है और एक बूलियन वैल्यू लौटाता है।
executeQuery(): यह मेथड करंट प्रीपेयर्ड स्टेटमेंट एक्जीक्यूट करता है और एक ResultSet ऑब्जेक्ट लौटाता है।
executeUpdate(): यह मेथड करंट प्रीपेयर्ड स्टेटमेंट में INSERT, UPDATE, DELETE जैसे SQL DML स्टेटमेंट्स एक्जीक्यूट करता है। यह प्रभावित पंक्तियों की संख्या दर्शाने वाला एक इंटीजर वैल्यू लौटाता है।
आप उपरोक्त बनाए गए प्रीपेयर्ड स्टेटमेंट को नीचे दिखाए अनुसार एक्जीक्यूट कर सकते हैं:
उदाहरण
इस उदाहरण में हम प्रीपेयर्ड स्टेटमेंट का उपयोग करके Employees नाम की एक टेबल में वैल्यू इन्सर्ट करने का प्रयास कर रहे हैं।
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class PreparedStatementExample {
public static void main(String args[]) throws SQLException {
// ड्राइवर रजिस्टर करना
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
// कनेक्शन प्राप्त करना
String mysqlUrl = "jdbc:mysql://localhost/testdb";
Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
System.out.println("Connection established......");
// Prepared Statement बनाना
String query = "INSERT INTO Employees(Name, Salary, Location) VALUES (?, ?, ?)";
PreparedStatement pstmt = con.prepareStatement(query);
pstmt.setString(1, "Amit");
pstmt.setInt(2, 3000);
pstmt.setString(3, "Hyderabad");
pstmt.setString(1, "Kalyan");
pstmt.setInt(2, 4000);
pstmt.setString(3, "Vishakhapatnam");
pstmt.setString(1, "Renuka");
pstmt.setInt(2, 5000);
pstmt.setString(3, "Delhi");
pstmt.setString(1, "Archana");
pstmt.setInt(2, 15000);
pstmt.setString(3, "Mumbai");
int num = pstmt.executeUpdate();
System.out.println("Rows inserted ....");
}
}
आउटपुट
Connection established...... Number of rows inserted: 1
यदि आप डेटाबेस वेरिफाई करते हैं, तो आप टेबल में इन्सर्ट की गई वैल्यूज़ देख सकते हैं:
+---------+--------+----------------+ | Name | Salary | Location | +---------+--------+----------------+ | Amit | 30000 | Hyderabad | | Kalyan | 40000 | Vishakhapatnam | | Renuka | 50000 | Delhi | | Archana | 15000 | Mumbai | +---------+--------+----------------+ 5 rows in set (0.00 sec)