6.1 रोसेट का परिचय

जैसा कि आप पहले से ही जानते हैं, JDBC मानक लगभग 20 साल पुराना है और थोड़ा पुराना है। इसमें धीरे-धीरे नए प्रकार और नए वर्ग जुड़ते जा रहे हैं, लेकिन हर जगह खूबसूरती से ऐसा नहीं किया जा सकता। और उन स्थानों में से एक है ResultSet

डेटाबेस को और अधिक कुशल बनाया जा सकता है, लेकिन ResultSet इंटरफ़ेस खराब है। इसके अलावा, हम स्पष्ट रूप से इसकी वस्तुओं को कहीं भी नहीं बनाते हैं, वे हमारे द्वारा वापस कर दिए जाते हैं executeQuery()

JDBC के रचनाकारों ने लंबे समय तक नहीं सोचा और एक ऐसा तंत्र बनाया जो पहले की हर चीज के समानांतर है। और इसे RowSet के नाम से जाना जाने लगा ।

यहाँ इसके मुख्य लाभ हैं:

  • RowSet, ResultSet इंटरफ़ेस का विस्तार करता है, इसलिए इसके कार्य ResultSet की तुलना में अधिक शक्तिशाली होते हैं।
  • रोसेट टेबल डेटा के माध्यम से अधिक लचीले ढंग से नेविगेट करता है और आगे और पीछे स्क्रॉल कर सकता है।
  • RowSet कैश्ड डेटा को बनाए रखता है जिसका उपयोग कनेक्शन बंद होने के बाद भी किया जा सकता है।
  • रोसेट नई कनेक्शन विधि का समर्थन करता है, आप बिना कनेक्शन के डेटाबेस से जुड़ सकते हैं। यह XML डेटा स्रोत को पढ़ने का भी समर्थन करता है।
  • RowSet डेटा फ़िल्टर का समर्थन करता है।
  • रोसेट टेबल जॉइन ऑपरेशंस का भी समर्थन करता है।

रोसेट प्रकार:

  • कैश्डरोसेट
  • फ़िल्टर्डरोसेट
  • JdbcRowSet
  • जॉइनरोसेट
  • WebRowSet

6.2 रोसेट ऑब्जेक्ट बनाना

कार्य वस्तु प्राप्त करने के तीन अलग-अलग तरीके हैं।

सबसे पहले, इसे शास्त्रीय तरीके से प्राप्त परिणामसेट से डेटा से भरा जा सकता है ।

उदाहरण के लिए, हम CachedRowSet का उपयोग करके ResultSet डेटा को कैश कर सकते हैं :


Statement statement = connection.createStatement();
ResultSet results = statement.executeQuery("SELECT * FROM user");
 
RowSetFactory factory = RowSetProvider.newFactory();
CachedRowSet crs = factory.createCachedRowSet();
crs.populate(results);		// Use ResultSet to populate

दूसरा, आप इसके लिए अपना डेटाबेस कनेक्शन बनाकर पूरी तरह से स्व-निहित RowSet ऑब्जेक्ट बना सकते हैं :


JdbcRowSet rowSet = RowSetProvider.newFactory().createJdbcRowSet();
rowSet.setUrl("jdbc:mysql://localhost:3306/test");
rowSet.setUsername("root");
rowSet.setPassword("secret");
 
rowSet.setCommand("SELECT * FROM user");
rowSet.execute();

और तीसरा, आप RowSet को पहले से मौजूद कनेक्शन से जोड़ सकते हैं:

Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");
JdbcRowSet rowSet = new JdbcRowSetImpl(con);

rowSet.setCommand("SELECT * FROM user");
rowSet.execute();

6.3 रोसेट के साथ काम करने के उदाहरण

उदाहरण एक: कैशिंग

चलिए एक कोड लिखते हैं जहाँ हम सभी डेटा को कैश करने के लिए CachedRowSet का उपयोग करते हैं और इसे पहले से बंद कनेक्शन से पढ़ते हैं:

Statement statement = connection.createStatement();
ResultSet results = statement.executeQuery("SELECT * FROM user");

RowSetFactory factory = RowSetProvider.newFactory();
CachedRowSet crs = factory.createCachedRowSet();
crs.populate(results);	// Use ResultSet to populate

connection.close();		// Close the connection

// Cache data is still available
while(crs.next()) {
  	System.out.println(crs.getString(1)+"\t"+ crs.getString(2)+"\t"+ crs.getString(3));
}

उदाहरण दो: RowSet के माध्यम से पंक्तियाँ बदलना :

// Connect to the database
 CachedRowSet crs = rsf.createCachedRowSet();
 crs.setUrl("jdbc:mysql://localhost/test");
 crs.setUsername("root");
 crs.setPassword("root");
 crs.setCommand("SELECT * FROM user");
 crs.execute();

// This type of operation can only change standalone RowSet
// First, move the pointer to an empty (new) string, the current position is remembered
 crs.moveToInsertRow();
 crs.updateString(1, Random.nextInt());
 crs.updateString(2, "Clone" + System.currentTimeMillis());
 crs.updateString(3, "Female");
 crs.insertRow();  // Add the current (new) line to the rest of the lines
 crs.moveToCurrentRow(); // Return a pointer to the line where it was before insertion

 crs.beforeFirst();
 while(crs.next()) {
 	System.out.println(crs.getString(1) + "," + crs.getString(2) + "," + crs.getString(3));
}

// And now we can upload all our changes to the database
Connection con = DriverManager.getConnection("jdbc:mysql://localhost/dbtest", "root", "root");
con.setAutoCommit(false); // Needed for synchronization
crs.acceptChanges(con);// Synchronize data to database

यदि आप रुचि रखते हैं कि यह कैसे काम करता है, तो आप आधिकारिक दस्तावेज में विषय पढ़ सकते हैं। फिलहाल मेरा काम केवल यह बताना है कि यह क्या है।