কম্পিউটার টিউটোরিয়াল

JDBC-তে Result Set কত প্রকার এবং সেগুলো কী?


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

  1. Android-এ Intent কত প্রকারের হয়?

  2. JDBC-তে ResultSet কী? ResultSet অবজেক্ট থেকে ডেটা কীভাবে বের করবেন?

  3. সিকিউরিটি ভার্নারেবিলিটি কতগুলো আছে এবং কীভাবে তাদের মূল্যায়ন করা হয়?

  4. অনলাইন বিজ্ঞাপনের কোন প্রকারগুলো গ্রহণযোগ্য?