ResultSet হলো একটি Java অবজেক্ট যা SQL কুয়েরি থেকে প্রাপ্ত ডেটা ধারণ করে। ResultSet ব্যবহার করে ডেটাবেস থেকে ডেটা রিড এবং ম্যানিপুলেট করা যায়। ডিফল্টভাবে, ResultSet সাধারণত শুধুমাত্র ফোরওয়ার্ড (forward) মোডে কাজ করে, অর্থাৎ একবার ডেটা প্রাপ্ত হলে আপনি তা পূর্বের রেকর্ডে ফিরে যেতে পারবেন না বা সেটি আপডেট করতে পারবেন না।
তবে, Scrollable এবং Updatable ResultSet ব্যবহার করে আপনি ডেটাবেসের রেকর্ডগুলো স্ক্রল করতে এবং সেগুলে আপডেট করতে পারেন।
1. Scrollable ResultSet
Scrollable ResultSet হল এমন একটি ResultSet যা ডেটার মধ্যে স্ক্রল (পেছনে বা সামনে) করতে সাহায্য করে। এর মাধ্যমে আপনি রেকর্ডগুলোর মধ্যে এগোতে বা পিছিয়ে যেতে পারবেন। সাধারণ ResultSet-এর মধ্যে শুধুমাত্র ফোরওয়ার্ড ট্রাভার্সাল করা সম্ভব, কিন্তু Scrollable ResultSet এ আপনি রেকর্ডের মধ্যে যেকোনো জায়গায় যেতে পারবেন।
Scrollable ResultSet এর ব্যবহার:
Scrollable ResultSet তৈরি করতে হলে Statement বা PreparedStatement ব্যবহার করার সময় ResultSet.TYPE_SCROLL_INSENSITIVE অথবা ResultSet.TYPE_SCROLL_SENSITIVE ফ্ল্যাগ সেট করতে হয়।
- ResultSet.TYPE_SCROLL_INSENSITIVE: এই ধরনের
ResultSetডেটা লোড করার পর তার কোনো পরিবর্তন থেকে অবগত থাকে না। অর্থাৎ, আপনি যখন ডেটাবেসের ডেটা পরিবর্তন করবেন, তখন এটিResultSet-এ দেখাবে না। - ResultSet.TYPE_SCROLL_SENSITIVE: এই ধরনের
ResultSetডেটাবেসে যেকোনো পরিবর্তন হলে তা আন্ডারলাইন ডেটাবেস থেকে টেনে আনবে এবং আপডেট করবে।
উদাহরণ:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class ScrollableResultSetExample {
public static void main(String[] args) {
try {
// ডেটাবেস সংযোগ
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/TestDB", "root", "password");
// স্টেটমেন্ট তৈরি
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
// কুয়েরি রান
ResultSet rs = stmt.executeQuery("SELECT id, name FROM employees");
// স্ক্রলিংয়ের উদাহরণ
// প্রথম রেকর্ডে চলে যাওয়া
rs.first();
System.out.println("First Record: " + rs.getString("name"));
// পরবর্তী রেকর্ডে স্ক্রল
rs.next();
System.out.println("Next Record: " + rs.getString("name"));
// আগের রেকর্ডে ফিরে যাওয়া
rs.previous();
System.out.println("Previous Record: " + rs.getString("name"));
// শেষ রেকর্ডে চলে যাওয়া
rs.last();
System.out.println("Last Record: " + rs.getString("name"));
// সংযোগ বন্ধ
rs.close();
stmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
এখানে:
ResultSet.TYPE_SCROLL_INSENSITIVE: এটি স্ক্রলযোগ্যResultSetতৈরি করে যা ডেটাবেসের পরিবর্তন থেকে প্রভাবিত হয় না।rs.first(),rs.next(),rs.previous(),rs.last(): এসব মেথডের মাধ্যমে রেকর্ডগুলোর মধ্যে স্ক্রল করা যায়।
2. Updatable ResultSet
Updatable ResultSet হল একটি ResultSet যা ডেটার মধ্যে পরিবর্তন করার ক্ষমতা প্রদান করে। এর মাধ্যমে আপনি রেকর্ডের ভ্যালু পরিবর্তন করতে পারেন এবং সেই পরিবর্তন ডেটাবেসে সেভ করতে পারবেন। Updatable ResultSet ব্যবহারের জন্য আপনি Statement বা PreparedStatement তৈরি করার সময় ResultSet.CONCUR_UPDATABLE ফ্ল্যাগ ব্যবহার করবেন।
Updatable ResultSet এর ব্যবহার:
Updatable ResultSet তৈরি করতে হলে, আপনাকে ResultSet-এর জন্য TYPE_FORWARD_ONLY বা TYPE_SCROLL_INSENSITIVE এর সাথে CONCUR_UPDATABLE ফ্ল্যাগ যোগ করতে হবে।
উদাহরণ:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class UpdatableResultSetExample {
public static void main(String[] args) {
try {
// ডেটাবেস সংযোগ
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/TestDB", "root", "password");
// স্টেটমেন্ট তৈরি
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
// কুয়েরি রান
ResultSet rs = stmt.executeQuery("SELECT id, name, salary FROM employees");
// প্রথম রেকর্ডে যাওয়া
if (rs.next()) {
// salary পরিবর্তন করা
rs.updateDouble("salary", 5000.0);
rs.updateRow(); // পরিবর্তন সেভ করা
System.out.println("Updated salary for: " + rs.getString("name"));
}
// সংযোগ বন্ধ
rs.close();
stmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
এখানে:
ResultSet.CONCUR_UPDATABLE: এটি নিশ্চিত করে যেResultSetআপডেট করা যাবে।rs.updateDouble("salary", 5000.0):salaryকলামে নতুন মান প্রদান করা হয়েছে।rs.updateRow(): আপডেট করা তথ্য ডেটাবেসে সেভ করা হয়েছে।
3. Scrollable এবং Updatable ResultSet এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Scrollable ResultSet | Updatable ResultSet |
|---|---|---|
| ফাংশনালিটি | স্ক্রল করা (ফরওয়ার্ড এবং ব্যাকওয়ার্ড) | ডেটাবেসের ডেটা আপডেট করা |
| পদ্ধতি | first(), next(), previous(), last() | updateXXX(), insertRow(), deleteRow() |
| মোড | সাধারণত শুধুমাত্র রিড-অনলি | ডেটা রিড এবং আপডেট উভয়ই করা যায় |
| ব্যবহার | ডেটার মধ্যে নেভিগেশন করার জন্য | ডেটাবেসে পরিবর্তন করার জন্য |
| ফ্ল্যাগ | ResultSet.TYPE_SCROLL_INSENSITIVE বা TYPE_SCROLL_SENSITIVE | ResultSet.CONCUR_UPDATABLE |
সারাংশ
Scrollable ResultSet ব্যবহার করে আপনি ডেটাবেসের মধ্যে রেকর্ডগুলোর মধ্যে স্ক্রল করতে পারেন, অর্থাৎ আপনি পেছনে বা সামনে যেতে পারবেন। এটি দুইটি মোডে পাওয়া যায়: TYPE_SCROLL_INSENSITIVE এবং TYPE_SCROLL_SENSITIVE। অপরদিকে, Updatable ResultSet ব্যবহার করে আপনি ডেটাবেসের ডেটা পরিবর্তন করতে পারবেন, এবং সেই পরিবর্তন ডেটাবেসে সেভ করতে পারবেন। এটি CONCUR_UPDATABLE ফ্ল্যাগের মাধ্যমে সক্রিয় করা হয়। Java-তে এই দুটি টেকনোলজি ব্যবহার করে আপনি ডেটাবেসের ডেটার উপর আরও ভালো নিয়ন্ত্রণ পেতে পারেন।
Read more