Bagi kalian yang pernah menggunakan JDBC untuk mengakses database tentu sudah tidak asing lagi dengan ResultSet. ResultSet merupakan return value yang didapat apabila kita menjalankan SQL statement SELECT ke database. ResultSet itu sendiri merupakan sebuah interface yang mengontrol letak kursor terhadap suatu record(baris) yang sedang aktif di suatu table.

Disini saya akan memberikan contoh berbagai fungsi dari ResultSet yang mungkin belum kalian ketahui, karena kebanyakan method yang dipakai hanyalah next() (berdasarkan pengalaman teman-teman saya). Langsung saja buatlah sebuah table person di database kalian dengan field no (integer) dan name (varchar) (saya menggunakan postgresql sebagai databasenya).

Lalu buatlah sebuah class ConnectionUtil sebagai berikut :

package com.maniakjava.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ConnectionUtil {

    public static Connection getConnection() {
        Connection conn = null;
        try {
            Class.forName("org.postgresql.Driver");
            String url = "jdbc:postgresql://localhost:5432/maniakjava";
            String user = "postgres";
            String pass = "xxxx";
            conn = DriverManager.getConnection(url, user, pass);
        } catch (ClassNotFoundException cnfe) {
            System.err.println("Class error :  " + cnfe.getMessage());
        } catch (SQLException se) {
            System.err.println("SQL error : " + se.getMessage());
        } catch (Exception e) {
            System.err.println("Error : " + e.getMessage());
        }
        return conn;
    }
}

Lalu buat sebuah class Main berikut :

package com.pineappletech.action;

import com.maniakjava.util.ConnectionUtil;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Main {

    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
            conn = ConnectionUtil.getConnection();
            stmt = conn.createStatement();
            rs = stmt.executeQuery("select no,name from person");

            while (rs.next()) {
                System.out.println("No : " + rs.getInt(1) + " Name : " + rs.getString("name"));
            }
        } catch (Exception e) {
        } finally {
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException ex) {
                    Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException ex) {
                    Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException ex) {
                    Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
    }
}

Class Main diatas tentu sudah familiar bukan bagi kalian ? Ya, class Main di atas berfungsi untuk mengambil data di
table dengan urutan ascending (sesuai urutan data saat diinsert ke database). Output yang dihasilkan adalah :

No : 1 Name : aaa aaa
No : 2 Name : bbb bbb
No : 3 Name : ccc ccc
No : 4 Name : ddd ddd
No : 5 Name : eee eee
No : 6 Name : fff fff

Lalu bagaimana jika kita ingin menampilkan datanya secara descending ? ada berbagai cara tentunya, bisa kita menggunakan “order by no desc” pada syntaks querynya, bisa juga kita tampung data-datanya di sebuah object List, baru kita sort, dsb. Namun interface resultset sudah menyediakan suatu method untuk mengambil record dari akhir sampai awal, yaitu method afterlast() dan previous().

Method afterlast() berfungsi untuk memindahkan kursor ke record paling akhir. Sedangkan previous() berfungsi untuk menggerakkan kursor ke belakang. Coba kalian tambahkan code berikut di dalam block try pada class Main di atas :

            System.out.println("---");
            rs.afterLast();
            while (rs.previous()) {
                System.out.println("No : " + rs.getInt(1) + " Name : " + rs.getString("name"));
            }

Maka outputnya jika dijalankan adalah :

No : 1 Name : aaa aaa
No : 2 Name : bbb bbb
No : 3 Name : ccc ccc
No : 4 Name : ddd ddd
No : 5 Name : eee eee
No : 6 Name : fff fff
---
No : 6 Name : fff fff
No : 5 Name : eee eee
No : 4 Name : ddd ddd
No : 3 Name : ccc ccc
No : 2 Name : bbb bbb
No : 1 Name : aaa aaa

Kemudian ada juga method absolute(int row) yang berfungsi untuk memindahkan kursor ke posisi tertentu sesuai parameter yang dimasukkan. Jika parameter yang dimasukkan berupa bilangan positif, maka kursor akan diletakkan pada posisi yang dihitung dari awal. Sedangkan apabila parameter yang dimasukkan berupa bilangan negatif, maka kursor akan diletakkan pada posisi yang dihitung dari akhir.
Selain itu ada juga method first() yang berfungsi untuk menggerakkan kursor ke record paling awal dan method last() yang berfungsi untuk menggerakan kursor ke record paling akhir.
Sebenarnya masih banyak lagi method dari resultset, namun method yang paling umum digunakan sudah saya jelaskan disini.

Sekarang coba tambahkan lagi source code berikut di class Main :

            System.out.println("---");
            rs.first();
            System.out.println("No : " + rs.getInt(1) + " Name : " + rs.getString("name"));
            rs.last();
            System.out.println("No : " + rs.getInt(1) + " Name : " + rs.getString("name"));
            rs.absolute(2);
            System.out.println("No : " + rs.getInt(1) + " Name : " + rs.getString("name"));
            rs.absolute(-2);
            System.out.println("No : " + rs.getInt(1) + " Name : " + rs.getString("name"));

Dan jika dijalankan akan menampilkan output berikut :

No : 1 Name : aaa aaa
No : 2 Name : bbb bbb
No : 3 Name : ccc ccc
No : 4 Name : ddd ddd
No : 5 Name : eee eee
No : 6 Name : fff fff
---
No : 6 Name : fff fff
No : 5 Name : eee eee
No : 4 Name : ddd ddd
No : 3 Name : ccc ccc
No : 2 Name : bbb bbb
No : 1 Name : aaa aaa
---
No : 1 Name : aaa aaa
No : 6 Name : fff fff
No : 2 Name : bbb bbb
No : 3 Name : ccc ccc
No : 5 Name : eee eee

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s