Executing Statements: Statement, PreparedStatement, and CallableStatement
Executing Statements, PreparedStatement और CallableStatement in JDBC
अगर आप JDBC (Java Database Connectivity) पढ़ रहे हैं, तो “Executing Statements” एक बहुत ही important topic है। ये concept समझना ज़रूरी है क्योंकि यही वो हिस्सा है जहाँ Java code actually database से interact करता है। यानी यही वो point है जहाँ data insert, update, delete या retrieve होता है। आज हम step-by-step तरीके से समझेंगे कि Statement, PreparedStatement और CallableStatement क्या होते हैं, कैसे काम करते हैं, और exam के लिए इन्हें कैसे याद रखा जाए।
What is Executing Statements?
जब भी हम JDBC के through किसी database से communicate करते हैं, तो हमें SQL commands execute करनी होती हैं जैसे SELECT, INSERT, UPDATE या DELETE। JDBC में ये commands execute करने के लिए तीन main interfaces होते हैं — Statement, PreparedStatement, और CallableStatement।
इन तीनों का काम database से SQL query run करना होता है, लेकिन हर एक का purpose थोड़ा अलग है। चलिए इन्हें detail में समझते हैं।
Statement Interface
Definition
Statement सबसे basic interface है जो SQL query execute करने के लिए use किया जाता है। इसे तब use किया जाता है जब SQL query static होती है यानी हर बार same रहती है।
Syntax Example
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM student");
Important Methods of Statement
executeQuery(String sql)→ SELECT queries के लिए use होता है और ResultSet return करता है।executeUpdate(String sql)→ INSERT, UPDATE, DELETE queries के लिए use होता है और affected rows की संख्या return करता है।execute(String sql)→ किसी भी SQL statement को execute करने के लिए use होता है (SELECT या UPDATE दोनों)।
Example Program
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","1234");
Statement stmt = con.createStatement();
int result = stmt.executeUpdate("INSERT INTO student VALUES (101, 'Ravi', 'MCA')");
System.out.println(result + " record inserted");
Advantages
- Simple और easy to use है।
- Small applications या static queries के लिए perfect है।
Disadvantages
- हर बार SQL query को compile करना पड़ता है, जिससे performance कम होती है।
- Dynamic data insert करना unsafe होता है (SQL Injection का खतरा)।
PreparedStatement Interface
Definition
PreparedStatement Statement का advanced version है जो precompiled SQL queries को use करता है। इसका main benefit यह है कि performance बेहतर होती है और SQL Injection से बचाव होता है।
Syntax Example
PreparedStatement pstmt = con.prepareStatement("INSERT INTO student VALUES(?, ?, ?)");
pstmt.setInt(1, 102);
pstmt.setString(2, "Amit");
pstmt.setString(3, "MCA");
pstmt.executeUpdate();
Working Explanation
जब हम PreparedStatement create करते हैं, तो SQL statement पहले से compiled हो जाती है। उसके बाद हम सिर्फ values set करते हैं और query को execute करते हैं।
Important Methods
setInt(int parameterIndex, int value)→ integer value set करने के लिए।setString(int parameterIndex, String value)→ string value set करने के लिए।executeUpdate()→ non-select queries run करने के लिए।executeQuery()→ SELECT queries के लिए।
Example Program
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","1234");
PreparedStatement pstmt = con.prepareStatement("UPDATE student SET name=? WHERE roll=?");
pstmt.setString(1, "Rahul");
pstmt.setInt(2, 101);
int result = pstmt.executeUpdate();
System.out.println(result + " record updated");
Advantages
- Performance high होती है क्योंकि query precompiled रहती है।
- SQL Injection से सुरक्षा मिलती है।
- Code ज्यादा readable और maintainable होता है।
Disadvantages
- Static query के लिए ज्यादा complex लग सकता है।
- Memory usage थोड़ा बढ़ सकता है।
Use Case
PreparedStatement तब use करें जब query बार-बार execute होनी हो या dynamic data insert/update करना हो।
CallableStatement Interface
Definition
CallableStatement stored procedures को execute करने के लिए use किया जाता है। Stored procedure database में stored होती है और इसमें कई SQL statements हो सकती हैं।
Syntax Example
CallableStatement cstmt = con.prepareCall("{call insertStudent(?, ?, ?)}");
cstmt.setInt(1, 103);
cstmt.setString(2, "Suresh");
cstmt.setString(3, "BBA");
cstmt.execute();
Important Methods
setInt(),setString()→ parameters set करने के लिए।registerOutParameter()→ output parameters register करने के लिए।execute()→ stored procedure run करने के लिए।
Example Program (With Output Parameter)
CallableStatement cstmt = con.prepareCall("{call getStudentName(?, ?)}");
cstmt.setInt(1, 101);
cstmt.registerOutParameter(2, Types.VARCHAR);
cstmt.execute();
String name = cstmt.getString(2);
System.out.println("Student Name: " + name);
Advantages
- Database में logic store रहता है, जिससे application code simple होता है।
- Performance बेहतर रहती है क्योंकि stored procedure precompiled होती है।
- Security बढ़ती है क्योंकि queries directly नहीं चलतीं।
Disadvantages
- Stored procedures को maintain करना थोड़ा complex होता है।
- Portability कम होती है क्योंकि हर database का syntax अलग होता है।
Comparison Table
| Feature | Statement | PreparedStatement | CallableStatement |
|---|---|---|---|
| Used For | Static SQL | Parameterized SQL | Stored Procedures |
| Compilation | Every time | Once only | Precompiled |
| Performance | Low | High | Highest |
| SQL Injection Protection | No | Yes | Yes |
| Ease of Use | Simple | Moderate | Complex |
| Use Case | Static Queries | Repeated/Dynamic Queries | Stored Procedures |
Real-Life Example (Easy Understanding)
Imagine कीजिए कि आप एक restaurant में waiter को order दे रहे हैं:
- Statement → हर बार आप menu देखकर पूरी order बोलते हैं (हर बार नया SQL command)।
- PreparedStatement → आप waiter को एक fixed order format दे देते हैं, बस ingredients change करते हैं (predefined query)।
- CallableStatement → आप kitchen को बोलते हैं कि “Chef का special dish बना दो” (stored procedure)।
इस analogy से clear होता है कि PreparedStatement और CallableStatement ज्यादा efficient और secure तरीके हैं SQL execution के लिए।
Exam-Focused Notes
- Statement – Static queries execute करने के लिए। हर बार compile होती है।
- PreparedStatement – Precompiled queries, fast और safe execution के लिए।
- CallableStatement – Stored procedures execute करने के लिए।
- Performance Order – CallableStatement > PreparedStatement > Statement
- SQL Injection से बचाव – PreparedStatement और CallableStatement।
- Exam Tip: हमेशा remember करें — “Prepared = Safe, Callable = Smart”.
Key Points to Remember
- PreparedStatement और CallableStatement हमेशा Statement से बेहतर performance देते हैं।
- CallableStatement का use तब करें जब business logic database में stored हो।
- SQL queries में parameters “?” से pass किए जाते हैं PreparedStatement और CallableStatement में।
- Statement simple applications के लिए sufficient है लेकिन secure नहीं।
- JDBC में हमेशा Connection close करना ज़रूरी है, वरना memory leak हो सकता है।
Interview & Viva Important Facts
- Q: Which is faster, Statement or PreparedStatement?
A: PreparedStatement, because it is precompiled. - Q: What prevents SQL Injection in JDBC?
A: PreparedStatement और CallableStatement। - Q: Can we use parameters in Statement?
A: No, only in PreparedStatement and CallableStatement। - Q: Can CallableStatement return results?
A: Yes, using OUT parameters।