6.1 RowSet এর পরিচিতি

আপনি ইতিমধ্যে জানেন, JDBC মান প্রায় 20 বছর পুরানো এবং একটু পুরানো। এতে ধীরে ধীরে নতুন ধরনের এবং নতুন ক্লাস যুক্ত হচ্ছে, তবে এটি সর্বত্র সুন্দরভাবে করা যায় না। আর সেই জায়গাগুলোর মধ্যে একটি হল ResultSet

ডাটাবেস আরও দক্ষ করা যেতে পারে, কিন্তু ফলাফল সেট ইন্টারফেস একটি দুর্বল ফিট। উপরন্তু, আমরা স্পষ্টভাবে কোথাও এর বস্তু তৈরি করি না, সেগুলি আমাদের কাছে ফেরত দেয় executeQuery()

JDBC এর নির্মাতারা দীর্ঘ চিন্তা করেননি এবং এমন একটি ব্যবস্থা তৈরি করেছেন যা আগের সবকিছুর সাথে সম্পূর্ণ সমান্তরাল। এবং এটি RowSet নামে পরিচিতি লাভ করে ।

এখানে এর প্রধান সুবিধা রয়েছে:

  • RowSet ResultSet ইন্টারফেসকে প্রসারিত করে, তাই এর ফাংশনগুলি ResultSet এর চেয়ে বেশি শক্তিশালী।
  • RowSet টেবিল ডেটার মাধ্যমে আরও নমনীয়ভাবে নেভিগেট করে এবং পিছনে পিছনে স্ক্রোল করতে পারে।
  • RowSet ক্যাশ করা ডেটা বজায় রাখে যা সংযোগ বন্ধ হওয়ার পরেও ব্যবহার করা যেতে পারে।
  • RowSet নতুন সংযোগ পদ্ধতি সমর্থন করে, আপনি সংযোগ ছাড়াই ডাটাবেসের সাথে সংযোগ করতে পারেন। এটি XML ডেটা উত্স পড়া সমর্থন করে।
  • RowSet ডেটা ফিল্টার সমর্থন করে।
  • RowSet এছাড়াও টেবিল যোগদান অপারেশন সমর্থন করে.

রোসেট প্রকার:

  • ক্যাশেডরো সেট
  • FilteredRowSet
  • JdbcRowSet
  • JoinRowSet
  • WebRowSet

6.2 একটি RowSet অবজেক্ট তৈরি করা

একটি কাজের বস্তু পেতে তিনটি ভিন্ন উপায় আছে.

প্রথমত, এটি ক্লাসিক্যাল উপায়ে প্রাপ্ত ফলাফলসেট থেকে ডেটা দিয়ে পূর্ণ করা যেতে পারে।

উদাহরণস্বরূপ, আমরা 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

দ্বিতীয়ত, আপনি এটির জন্য আপনার নিজস্ব ডাটাবেস সংযোগ তৈরি করে একটি সম্পূর্ণ স্বয়ংসম্পূর্ণ 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 RowSet এর সাথে কাজ করার উদাহরণ

উদাহরণ এক: ক্যাশিং

আসুন একটি কোড লিখি যেখানে আমরা সমস্ত ডেটা ক্যাশে করার জন্য 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

আপনি যদি এটি কীভাবে কাজ করে তাতে আগ্রহী হন, আপনি অফিসিয়াল ডকুমেন্টেশনে বিষয়টি পড়তে পারেন। এই মুহুর্তে আমার কাজ কেবল এটি কী তা বলা।