Updatable ResultSets: insertRow(), updateRow(), deleteRow() with Live Updates
Updatable ResultSets in JDBC: insertRow(), updateRow(), deleteRow() with Live Updates
Updatable ResultSet क्या होता है?
JDBC में ResultSet का use database से data पढ़ने के लिए किया जाता है। लेकिन अगर हमें वही data runtime पर change करना हो — जैसे किसी row को update, insert या delete करना — तो हमें चाहिए Updatable ResultSet। यह normal ResultSet से अलग होता है क्योंकि इसमें live database update की capability होती है।
Simple शब्दों में कहें तो, Updatable ResultSet आपको database से data निकालने के साथ-साथ उसे उसी जगह पर modify करने की सुविधा देता है — यानी बिना नया SQL query लिखे, direct data में बदलाव करना।
Updatable ResultSet कैसे काम करता है?
जब हम JDBC से connection बनाते हैं, तो Statement या PreparedStatement बनाते समय
ResultSet के लिए दो extra parameters specify किए जाते हैं — scroll type और concurrency mode।
अगर हम concurrency mode को ResultSet.CONCUR_UPDATABLE सेट करें, तो ResultSet में changes possible हो जाते हैं।
इसका मतलब है कि जब हम ResultSet में कोई row modify करते हैं, तो वो changes directly database table में reflect हो जाते हैं।
ResultSet बनाने का Example
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/college", "root", "password");
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery("SELECT * FROM students");
ऊपर दिए गए code में TYPE_SCROLL_SENSITIVE का मतलब है कि ResultSet database में होने वाले live changes को detect करेगा, और CONCUR_UPDATABLE का मतलब है कि हम data को modify कर सकते हैं।
insertRow() method का use
अगर हमें ResultSet में एक नई row insert करनी हो, तो हम insertRow() method का use करते हैं। यह method नई row को ResultSet में और साथ ही database table में insert कर देता है।
Steps to use insertRow()
- पहले cursor को
moveToInsertRow()से नई temporary row पर ले जाएं। - फिर
updateXXX()methods से हर column में value set करें। - अंत में
insertRow()method call करें ताकि data table में insert हो जाए।
Example of insertRow()
rs.moveToInsertRow();
rs.updateInt("id", 105);
rs.updateString("name", "Rahul");
rs.updateString("course", "MCA");
rs.insertRow();
System.out.println("New record inserted successfully!");
इस code से students table में एक नई row add हो जाएगी — बिना किसी INSERT SQL query के। यानी, ResultSet खुद database को update करता है।
updateRow() method का use
कई बार हमें existing record में changes करने होते हैं, जैसे किसी student का नाम या marks update करना। ऐसे में हम updateRow() method का use करते हैं।
Steps to use updateRow()
- Cursor को उस row पर set करें जिसे modify करना है।
- फिर
updateXXX()methods से column values change करें। - फिर
updateRow()call करें ताकि changes database में reflect हो जाएं।
Example of updateRow()
rs.absolute(3); // तीसरी row पर cursor set करें
rs.updateString("name", "Amit Sharma");
rs.updateInt("marks", 90);
rs.updateRow();
System.out.println("Record updated successfully!");
इस code में हमने तीसरी row के data को change किया और database में तुरंत update हो गया। यह process simple, fast और clean होती है।
deleteRow() method का use
अगर हमें किसी particular record को delete करना हो, तो हम deleteRow() method का use करते हैं। यह method current row को ResultSet और database दोनों से remove कर देता है।
Steps to use deleteRow()
- Cursor को उस row पर ले जाएं जिसे delete करना है।
deleteRow()method call करें।
Example of deleteRow()
rs.absolute(2); // दूसरी row पर जाएं
rs.deleteRow();
System.out.println("Record deleted successfully!");
ऊपर दिए code में दूसरी row पूरी तरह से ResultSet और database दोनों से delete हो जाती है। इससे हमें अलग से DELETE SQL query चलाने की जरूरत नहीं पड़ती।
Live Updates कैसे होते हैं?
TYPE_SCROLL_SENSITIVE ResultSet database में real-time होने वाले बदलावों को पहचानता है। इसका मतलब, अगर किसी और user ने table में data modify किया है, तो ResultSet उस change को detect कर सकता है।
इसके विपरीत, TYPE_SCROLL_INSENSITIVE ResultSet में database के external changes reflect नहीं होते। इसलिए जब भी live update की जरूरत हो, TYPE_SCROLL_SENSITIVE use करना चाहिए।
Example (Live Update Check)
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery("SELECT * FROM students");
while(rs.next()) {
System.out.println(rs.getInt(1) + " - " + rs.getString(2));
}
अगर इस program के चलने के दौरान कोई और user database में data change करता है, तो ResultSet refresh होने पर वो updated data show करेगा।
ResultSet Methods Summary
| Method | Purpose | Effect on Database |
|---|---|---|
moveToInsertRow() |
Temporary row पर cursor set करता है नई entry insert करने के लिए | No immediate effect |
insertRow() |
नई row को ResultSet और table दोनों में insert करता है | New record added |
updateRow() |
Current row के modified data को database में update करता है | Existing record updated |
deleteRow() |
Current row को ResultSet और database दोनों से delete करता है | Record removed |
refreshRow() |
Database में updated data को ResultSet में reload करता है | Data refreshed |
Important Points to Remember
- Updatable ResultSet तभी काम करेगा जब query single table पर हो। Multiple tables के joins पर यह update नहीं करता।
- Table में primary key होना जरूरी है ताकि row uniquely identify हो सके।
- अगर ResultSet read-only है (CONCUR_READ_ONLY), तो insertRow(), updateRow(), deleteRow() methods काम नहीं करेंगे।
- Always use
TYPE_SCROLL_SENSITIVEजब live updates देखने हों। - After modifying rows, हमेशा
rs.refreshRow()से data reload करना अच्छा होता है।
Full Practical Example (Updatable ResultSet)
import java.sql.*;
public class UpdatableExample {
public static void main(String[] args) throws Exception {
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/college", "root", "password");
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery("SELECT * FROM students");
// Insert new row
rs.moveToInsertRow();
rs.updateInt("id", 110);
rs.updateString("name", "Kiran");
rs.updateString("course", "BBA");
rs.insertRow();
// Update existing row
rs.absolute(2);
rs.updateString("name", "Ravi Kumar");
rs.updateRow();
// Delete a row
rs.absolute(4);
rs.deleteRow();
System.out.println("All operations completed successfully!");
con.close();
}
}
यह example practically दिखाता है कि कैसे हम JDBC के Updatable ResultSet से database records को dynamically insert, update और delete कर सकते हैं — वो भी बिना कोई extra SQL command चलाए।
Advantages of Updatable ResultSet
- SQL queries को बार-बार लिखने की जरूरत नहीं पड़ती।
- Database के साथ real-time synchronization बना रहता है।
- Data modification process आसान और readable बनती है।
- Scrollable nature से हम किसी भी direction में move करके data change कर सकते हैं।
Limitations of Updatable ResultSet
- यह केवल single-table queries के लिए काम करता है।
- कुछ databases (जैसे older versions of Oracle) में limited support होती है।
- Performance थोड़ा slow हो सकता है अगर ResultSet बहुत बड़ा हो।
Exam-Oriented Notes (Quick Revision)
- Updatable ResultSet — ऐसा ResultSet जो insert, update, delete operations allow करता है।
- Methods: insertRow(), updateRow(), deleteRow()
- Required Mode: ResultSet.CONCUR_UPDATABLE
- Scroll Type: TYPE_SCROLL_SENSITIVE (for live updates)
- moveToInsertRow() — नई row add करने के लिए temporary pointer।
- updateRow() — existing data modify करने के लिए।
- deleteRow() — unwanted record हटाने के लिए।
- refreshRow() — ResultSet को database से sync करने के लिए।
- Use Case: जब runtime पर data changes करने की जरूरत हो बिना SQL commands लिखे।