Feedback Form

Scrollable and Updatable Result Sets in JDBC: Full Control

Scrollable and Updatable Result Sets in JDBC: Full Control

Scrollable and Updatable Result Sets क्या होते हैं?

जब हम JDBC (Java Database Connectivity) का use करते हैं, तो ResultSet object हमें database से प्राप्त data को access करने की सुविधा देता है। Normally, ResultSet एक forward-only cursor होता है — यानी आप data को केवल आगे की direction में पढ़ सकते हैं। लेकिन कभी-कभी हमें जरूरत होती है कि हम data को scroll (यानी आगे-पीछे move) भी कर सकें या update कर सकें। ऐसे cases में JDBC हमें Scrollable और Updatable ResultSet की सुविधा देता है।

Types of ResultSet

JDBC में ResultSet को उसके scrollability और updatability के आधार पर categorize किया गया है। ResultSet को create करते समय आप specify कर सकते हैं कि वो scrollable होगा या updatable।

1. Scroll Type Constants

  • ResultSet.TYPE_FORWARD_ONLY – Cursor केवल forward direction में move कर सकता है।
  • ResultSet.TYPE_SCROLL_INSENSITIVE – Cursor आगे-पीछे move कर सकता है, लेकिन database में किए गए external changes reflect नहीं होंगे।
  • ResultSet.TYPE_SCROLL_SENSITIVE – Cursor आगे-पीछे move कर सकता है और database में किए गए changes automatically reflect होंगे।

2. Concurrency Type Constants

  • ResultSet.CONCUR_READ_ONLY – ResultSet को केवल पढ़ने के लिए use किया जा सकता है।
  • ResultSet.CONCUR_UPDATABLE – ResultSet के माध्यम से database records को update, insert या delete किया जा सकता है।

Scrollable ResultSet कैसे Create करें?

Scrollable ResultSet create करने के लिए आप Statement या PreparedStatement object को create करते समय उसके type specify करते हैं। Example देखें:

Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/college", "root", "password");
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
ResultSet rs = stmt.executeQuery("SELECT * FROM students");

ऊपर के code में हमने ऐसा ResultSet बनाया है जो scrollable है लेकिन read-only है।

ResultSet को Scroll करने के Methods

Scrollable ResultSet हमें cursor को किसी भी direction में move करने की सुविधा देता है। इसके लिए JDBC कई useful methods provide करता है।

Method Description
next() Cursor को next row पर move करता है।
previous() Cursor को previous row पर move करता है।
first() Cursor को first row पर ले जाता है।
last() Cursor को last row पर ले जाता है।
absolute(int row) Cursor को specific row number पर move करता है।
relative(int rows) Cursor को current position से आगे या पीछे move करता है।
beforeFirst() Cursor को first row से पहले रखता है।
afterLast() Cursor को last row के बाद रखता है।

Example (Scrollable ResultSet)

Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/college", "root", "password");
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
ResultSet rs = stmt.executeQuery("SELECT * FROM students");

rs.afterLast();
while(rs.previous()) {
  System.out.println(rs.getInt("id") + " " + rs.getString("name"));
}

ऊपर के example में हमने data को reverse order में print किया है, यानी cursor को अंत से शुरुआत तक move कराया गया है।

Updatable ResultSet क्या होता है?

Normal ResultSet में आप data को सिर्फ पढ़ सकते हैं, लेकिन Updatable ResultSet आपको database table की rows को directly modify करने की सुविधा देता है। इससे आप ResultSet से ही update, insert और delete operations perform कर सकते हैं, बिना अलग SQL query लिखे।

Updatable ResultSet Create करने का तरीका

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");

यहाँ ResultSet scrollable और updatable दोनों है।

Updatable ResultSet के Important Methods

Method Purpose
updateXXX(columnName, value) Current row के किसी column का value update करता है।
updateRow() ResultSet में किए गए changes को database में apply करता है।
insertRow() नया record insert करता है।
deleteRow() Current row को delete करता है।
moveToInsertRow() Cursor को temporary insert row पर ले जाता है।
moveToCurrentRow() Insert row से वापस current row पर लौट आता है।

Example (Updating Data)

rs.absolute(2); // दूसरी row पर जाएं
rs.updateString("name", "Amit Kumar");
rs.updateRow();
System.out.println("Record updated successfully!");

Example (Inserting Data)

rs.moveToInsertRow();
rs.updateInt("id", 105);
rs.updateString("name", "Priya Sharma");
rs.updateString("course", "MCA");
rs.insertRow();
rs.moveToCurrentRow();
System.out.println("New record inserted!");

Example (Deleting Data)

rs.absolute(4); // चौथी row पर जाएं
rs.deleteRow();
System.out.println("Record deleted successfully!");

Scrollable और Updatable ResultSet से जुड़े Important Points

  • Scrollable और Updatable ResultSet बनाने के लिए database driver को इस feature को support करना चाहिए।
  • हर database driver scrollable या updatable functionality support नहीं करता, इसलिए हमेशा check करें।
  • Scrollable ResultSet में large data के साथ काम करते समय performance issue हो सकता है।
  • Updatable ResultSet छोटे और controlled datasets के लिए बेहतर होता है।
  • Auto-commit mode को off रखना बेहतर होता है ताकि आप changes को manage कर सकें।

Auto-commit को off करने का तरीका

con.setAutoCommit(false);
... // Perform updates
con.commit();

Scrollable और Updatable ResultSet कब Use करें?

Scrollable ResultSet तब उपयोगी होता है जब आपको data को दोनों directions में navigate करना हो — जैसे कि किसी report में previous और next record को compare करना। Updatable ResultSet तब उपयोगी होता है जब आप records को directly modify करना चाहते हैं — जैसे कि किसी admin panel में data edit करना।

  • Scrollable ResultSet – Useful in report generation, data navigation, pagination etc.
  • Updatable ResultSet – Useful in small admin tools, GUI applications, dynamic updates etc.

Mini Project Example (Scrollable & Updatable ResultSet)

नीचे एक छोटा-सा example है जो दोनों concepts को साथ में show करता है:

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");

// Scroll last to first
rs.afterLast();
while(rs.previous()) {
  System.out.println(rs.getInt("id") + " " + rs.getString("name"));
}

// Update first record
rs.first();
rs.updateString("name", "Ravi Verma");
rs.updateRow();
System.out.println("First record updated successfully!");

Scrollable और Updatable ResultSet के Advantages

  • Data navigation आसान और flexible हो जाता है।
  • Without writing extra SQL queries, आप data update कर सकते हैं।
  • GUI-based applications में real-time data editing के लिए useful होता है।
  • Reduced coding effort और clean logic provide करता है।

Limitations

  • हर database या driver इसे support नहीं करता।
  • Large datasets पर performance slow हो सकता है।
  • Complex updates में transaction management जरूरी हो जाता है।
  • Multiple users access के समय synchronization issues हो सकते हैं।

Exam Notes (Scrollable and Updatable Result Sets in JDBC)

  • Scrollable ResultSet – आगे और पीछे move करने की सुविधा देता है।
  • Updatable ResultSet – ResultSet से ही records को update, insert, delete कर सकते हैं।
  • Scrollable types – TYPE_FORWARD_ONLY, TYPE_SCROLL_INSENSITIVE, TYPE_SCROLL_SENSITIVE।
  • Concurrency types – CONCUR_READ_ONLY, CONCUR_UPDATABLE।
  • Important methods – next(), previous(), absolute(), updateRow(), insertRow(), deleteRow()।
  • Scrollable ResultSet report और pagination में use होता है।
  • Updatable ResultSet data modification tools में use होता है।
  • Auto-commit को manage करना जरूरी है ताकि changes properly reflect हों।
  • Driver support check करना हमेशा जरूरी है।