ResultSet Navigation: Forward-Only vs Scrollable, Read-Only vs Updatable
ResultSet Navigation: Forward-Only vs Scrollable, Read-Only vs Updatable
ResultSet क्या होता है?
जब हम JDBC (Java Database Connectivity) के ज़रिए database से data fetch करते हैं, तो जो result हमें मिलता है, उसे ResultSet कहते हैं। ये ResultSet database की table जैसी structure में data hold करता है। इसके ज़रिए हम records को row by row पढ़ सकते हैं और data को manipulate भी कर सकते हैं, अगर ResultSet उस mode में खुला हो।
ResultSet, Java में java.sql.ResultSet interface का object होता है। ये object statement execute करने के बाद generate होता है, जैसे:
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM students");
अब इस ResultSet को navigate (move) करने और update करने के अलग-अलग types होते हैं। इन्हीं types को हम detail में समझेंगे — Forward-Only vs Scrollable और Read-Only vs Updatable।
Forward-Only ResultSet क्या होता है?
Forward-Only ResultSet सबसे basic type का ResultSet होता है। इसमें cursor केवल forward direction में move कर सकता है, यानी पहली row से आखिरी row तक।
आप पिछली row पर वापस नहीं जा सकते और न ही randomly किसी specific row पर jump कर सकते हैं।
Example:
Statement stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
ResultSet rs = stmt.executeQuery("SELECT * FROM employees");
while(rs.next()) {
System.out.println(rs.getString("name"));
}
ऊपर के example में TYPE_FORWARD_ONLY ResultSet type define किया गया है,
जो data को sequentially एक दिशा में पढ़ने की अनुमति देता है।
Forward-Only ResultSet की विशेषताएँ:
- Cursor सिर्फ आगे बढ़ता है, पीछे नहीं जा सकता।
- Memory usage कम होती है क्योंकि data को केवल एक बार पढ़ा जाता है।
- Performance fast होती है, इसलिए इसे large data reading के लिए prefer किया जाता है।
- Limited functionality — random access नहीं होता।
Forward-Only कब Use करें:
- जब आपको सिर्फ data read करना हो, update या navigation की जरूरत न हो।
- जब data बहुत बड़ा हो और memory efficiency चाहिए।
Scrollable ResultSet क्या होता है?
Scrollable ResultSet में आप data को किसी भी direction में navigate कर सकते हैं। यानि आप cursor को आगे (forward), पीछे (backward) या किसी specific row पर move कर सकते हैं।
Scrollable ResultSet दो प्रकार के होते हैं:
- TYPE_SCROLL_INSENSITIVE — ResultSet static रहता है। Database में किए गए changes इस ResultSet में reflect नहीं होते।
- TYPE_SCROLL_SENSITIVE — ResultSet dynamic होता है। Database में अगर कोई record update या delete होता है, तो वो reflect हो सकता है।
Example:
Statement stmt = conn.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.getString("name"));
}
इस example में rs.previous() method backward direction में move करने की सुविधा देता है।
Scrollable ResultSet के methods:
rs.first()– cursor को पहली row पर ले जाता है।rs.last()– cursor को आखिरी row पर ले जाता है।rs.beforeFirst()– cursor को पहली row से पहले position पर रखता है।rs.afterLast()– cursor को आखिरी row के बाद रखता है।rs.absolute(int row)– cursor को specific row number पर ले जाता है।rs.relative(int rows)– cursor को current position से relative move करता है।
Scrollable ResultSet की विशेषताएँ:
- Bidirectional navigation – आगे-पीछे move कर सकते हैं।
- Random access संभव है।
- थोड़ा memory heavy होता है क्योंकि सभी records accessible होते हैं।
- Database changes reflect हो सकते हैं (अगर SENSITIVE type है)।
Read-Only ResultSet क्या होता है?
Read-Only ResultSet में आप data को सिर्फ पढ़ सकते हैं, modify नहीं कर सकते। Database में कोई भी change नहीं किया जा सकता।
Example:
Statement stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
ResultSet rs = stmt.executeQuery("SELECT * FROM products");
यहाँ CONCUR_READ_ONLY define करता है कि ResultSet केवल read mode में है।
Read-Only ResultSet की विशेषताएँ:
- Data को modify नहीं किया जा सकता।
- Performance बहुत fast होती है।
- Memory efficient है।
- Exam में commonly पूछा जाने वाला default ResultSet type यही होता है।
Read-Only कब Use करें:
- जब आपको सिर्फ database से data fetch करना हो।
- जब आप ensure करना चाहें कि data accidental update न हो।
Updatable ResultSet क्या होता है?
Updatable ResultSet में आप fetched data को modify कर सकते हैं। यानि आप rows को update, insert या delete भी कर सकते हैं।
Example:
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery("SELECT * FROM students");
rs.absolute(3);
rs.updateString("name", "Ravi Kumar");
rs.updateRow();
इस example में तीसरी row के name को “Ravi Kumar” से update किया गया है।
Updatable ResultSet के common methods:
updateInt(column, value)— integer value update करता है।updateString(column, value)— string value update करता है।updateRow()— current row में किए गए changes save करता है।deleteRow()— current row को delete करता है।moveToInsertRow()— नई row insert करने के लिए cursor को move करता है।insertRow()— नई row database में insert करता है।
Updatable ResultSet की विशेषताएँ:
- Data को modify, delete और insert किया जा सकता है।
- Scrollable होना जरूरी है ताकि cursor किसी भी row पर move हो सके।
- Performance थोड़ा slow हो सकता है क्योंकि database interaction ज़्यादा होता है।
ResultSet Types Comparison Table
| Type | Navigation | Update Allowed | Performance | Use Case |
|---|---|---|---|---|
| Forward-Only Read-Only | Only Forward | No | Fastest | Reading large data sets |
| Scrollable Read-Only | Forward & Backward | No | Moderate | Data navigation in both directions |
| Scrollable Updatable | Forward & Backward | Yes | Slower | When updates are required |
Practical Usage Tips
- Default ResultSet हमेशा TYPE_FORWARD_ONLY और CONCUR_READ_ONLY होता है।
- Scrollable ResultSet के लिए driver और database दोनों को support करना चाहिए।
- Updatable ResultSet के लिए query में
JOINयाAggregate Functionsनहीं होने चाहिए। - अगर आपको केवल read करना है, तो Forward-Only Read-Only सबसे efficient है।
Exam Point of View (Important Facts)
- Default ResultSet Type: TYPE_FORWARD_ONLY, CONCUR_READ_ONLY
- ResultSet Interface: java.sql package में होता है।
- Scrollable ResultSet Methods: first(), last(), absolute(), relative(), previous()
- Updatable ResultSet Methods: updateRow(), deleteRow(), insertRow()
- Driver Support: Scrollable और Updatable types तभी काम करते हैं जब JDBC driver उन्हें support करे।
Summary Points
- Forward-Only ResultSet simple और fastest होता है।
- Scrollable ResultSet data navigation में flexibility देता है।
- Read-Only ResultSet secure और efficient होता है।
- Updatable ResultSet data modification के लिए useful होता है।
- Type और Concurrency define करते समय हमेशा database compatibility check करें।