JDBC-তে দুটি প্রকার রেজাল্ট সেট থাকে: forward only এবং bidirectional।
Forward only ResultSet: যেটির কার্সর শুধু এক দিশায় চলতে পারে সেটিকে forward only ResultSet বলা হয়। ডিফল্টভাবে JDBC রেজাল্ট সেটগুলো forward-only হয়।
Forward only ResultSets-এর কার্সর সরাতে next() মেথড ব্যবহার করা হয়। এটি বর্তমান পজিশন থেকে পরবর্তী সারিতে পয়েন্টার সরায়। এটি বুলিয়ান মান রিটার্ন করে—পরবর্তী সারি না থাকলে false, অন্যথায় true। তাই while লুপে এটি ব্যবহার করে কনটেন্ট ইটারেট করা যায়।
while(rs.next()) { }
উদাহরণ
ধরি dataset নামক একটি টেবিল আছে:
+--------------+-----------+ | mobile_brand | unit_sale | +--------------+-----------+ | Iphone | 3000 | | Samsung | 4000 | | Nokia | 5000 | | Vivo | 1500 | +--------------+-----------+
নিচের উদাহরণ Dataset টেবিলের সকল রেকর্ড বের করে প্রিন্ট করে।
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class RetrievingData {
public static void main(String args[]) throws Exception {
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
String mysqlUrl = "jdbc:mysql://localhost/TestDB";
Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
System.out.println("Connection established......");
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("select * from Dataset");
System.out.println("Contents of the table");
while (rs.next()) {
System.out.print("Brand: " + rs.getString("Mobile_Brand") + ", ");
System.out.print("Sale: " + rs.getString("Unit_Sale"));
System.out.println();
}
}
}
আউটপুট
Connection established...... Contents of the table Brand: Iphone, Sale: 3000 Brand: Samsung, Sale: 4000 Brand: Nokia, Sale: 5000 Brand: Vivo, Sale: 1500
Bidirectional ResultSet: বি-ডাইরেকশনাল ResultSet অবজেক্ট হলো যেটির কার্সর ফরওয়ার্ড ও ব্যাকওয়ার্ড দুটি দিশায়ই চলতে পারে।
Connection ইন্টারফেসের createStatement() মেথডের একটি ভেরিয়েন্ট আছে যা দুটি ইন্টিজার মান গ্রহণ করে—রেজাল্ট সেট টাইপ এবং কনকারেন্সি টাইপ।
Statement createStatement(int resultSetType, int resultSetConcurrency)
Bi-directional result set তৈরি করতে টাইপ হিসেবে ResultSet.TYPE_SCROLL_SENSITIVE বা ResultSet.TYPE_SCROLL_INSENSITIVE পাস করতে হয় কনকারেন্সির সাথে:
// Creating a Statement object Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
উদাহরণ
নিচের উদাহরণ bi-directional ResultSet তৈরি করে previous() মেথড ব্যবহার করে ডেটা উল্টা আউটপুট দেয়।
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class BidirectionalResultSet {
public static void main(String args[]) throws Exception {
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
String mysqlUrl = "jdbc:mysql://localhost/TestDB";
Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
System.out.println("Connection established......");
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery("select * from Dataset");
rs.afterLast();
System.out.println("Contents of the table");
while (rs.previous()) {
System.out.print("Brand: " + rs.getString("Mobile_Brand") + ", ");
System.out.print("Sale: " + rs.getString("Unit_Sale"));
System.out.println();
}
}
}
আউটপুট
Connection established...... Contents of the table Brand: Vivo, Sale: 1500 Brand: Nokia, Sale: 5000 Brand: Samsung, Sale: 4000 Brand: IPhone, Sale: 3000