JDBC पैरामीटराइज़्ड बैच अपडेट
एक साथ कई INSERT, UPDATE या DELETE स्टेटमेंट्स को पैरामीटर्स के साथ बैच में निष्पादित करने की प्रक्रिया को पैरामीटराइज़्ड बैच अपडेट कहते हैं। यह प्रदर्शन में सुधार करता है और SQL इंजेक्शन से बचाता है।
सामान्य बैच अपडेट प्रक्रिया
Statementऑब्जेक्ट बनाएं- ऑटो-कमिट बंद करें:
con.setAutoCommit(false) - स्टेटमेंट्स को
addBatch()से जोड़ें executeBatch()से निष्पादित करें- कमिट करें:
con.commit()
पैरामीटराइज़्ड बैच अपडेट का लाभ
बार-बार क्वेरी स्ट्रिंग बनाने के बजाय PreparedStatement में प्लेसहोल्डर्स (?) उपयोग करें और सेटर मेथड्स से मान सेट करें। प्रत्येक मान सेट को addBatch() में जोड़ें।
उदाहरण: Sales टेबल में डेटा इन्सर्ट करना
मान लें Sales टेबल इस प्रकार है:
+-------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+--------------+------+-----+---------+-------+
| Product_Name | varchar(255) | YES | | NULL | |
| Name_Of_Customer | varchar(255) | YES | | NULL | |
| Month_Of_Dispatch | varchar(255) | YES | | NULL | |
| Price | int(11) | YES | | NULL | |
| Location | varchar(255) | YES | | NULL | |
+-------------------+--------------+------+-----+---------+-------+
जावा कोड उदाहरण
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Statement;
public class ParameterizedBatchUpdate {
public static void main(String args[]) throws Exception {
// कनेक्शन प्राप्त करें
String mysqlUrl = "jdbc:mysql://localhost/testDB";
Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
System.out.println("कनेक्शन स्थापित......");
Statement stmt = con.createStatement();
con.setAutoCommit(false);
PreparedStatement pstmt = con.prepareStatement(
"INSERT INTO Sales VALUES (?, ?, ?, ?, ?)");
// पहला रिकॉर्ड
pstmt.setString(1, "KeyBoard");
pstmt.setString(2, "Amith");
pstmt.setString(3, "January");
pstmt.setInt(4, 1000);
pstmt.setString(5, "Hyderabad");
pstmt.addBatch();
// दूसरा रिकॉर्ड
pstmt.setString(1, "Earphones");
pstmt.setString(2, "Sumith");
pstmt.setString(3, "March");
pstmt.setInt(4, 500);
pstmt.setString(5, "Vishakhapatnam");
pstmt.addBatch();
// तीसरा रिकॉर्ड
pstmt.setString(1, "Mouse");
pstmt.setString(2, "Sudha");
pstmt.setString(3, "September");
pstmt.setInt(4, 500);
pstmt.setString(5, "Vishakhapatnam");
pstmt.addBatch();
// बैच निष्पादित करें
stmt.executeBatch();
con.commit();
System.out.println("रिकॉर्ड्स इन्सर्टेड......");
}
}
आउटपुट
कनेक्शन स्थापित......
रिकॉर्ड्स इन्सर्टेड......
महत्वपूर्ण बिंदु
- हमेशा
setAutoCommit(false)का उपयोग करें - बैच निष्पादन के बाद
con.commit()अवश्य करें PreparedStatementSQL इंजेक्शन रोकता है- बड़े डेटा सेट्स के लिए बैच अपडेट बहुत तेज़ होता है