Jumat, 21 September 2012

Mengambil dan Memanipulasi Data dari Database

Proses pengambilan data dari database memerlukan suatu class untuk menampung data yang berhasil diambil, class tersebut harus mengimplement interface ResultSet.

Object yang bertipe ResultSet dapat mempunyai level fungsionalitas yang berbeda, hal ini tergantung dari tipe dari result set. Level fungsionalitas dari setiap tipe result set dibedakan berdasarkan dua area:

● Dengan cara bagaimana result set itu dapat dimanipulasi
● Bagaimana result set itu menangani perubahan data yang dilakukan oleh proses lain secara bersamaan (concurrent).

JDBC menyediakan tiga tipe result set untuk tujuan berbeda:

1. TYPE_FORWARD_ONLY : result set tersebut tidak bisa berjalan mundur, reslut set hanya bisa berjalan maju dari baris pertama hingga baris terakhir. result set hanya menggambarkan keadaan data ketika query dijalankan atau ketika data diterima oleh resul set. Jika setelah itu ada perubahan data dalam database, result set tidak akan diupdate alias tidak ada perubahan dalam result set tipe ini.

2. TYPE_SCROLL_INSENSITIVE : result set dapat berjalan maju mundur. result set dapat berjalan maju dari row pertama hingga terakhir atau bergerak bebas berdasarkan posisi relatif atau absolute.

3. TYPE_SCROLL_SENSITIVE : result set dapat berjalan maju mundur. result set dapat berjalan maju dari row pertama hingga terakhir atau bergerak bebas berdasarkan posisi relatif atau absolute.

Instance dari object bertipe ResultSet diperlukan untuk menampung hasil kembalian data dari database. Sebelum kita bisa memperoleh instance dari ResultSet, kita harus membuat instance dari class Statement. Class Statement mempunyai method executeQuery yang digunakan untuk menjalankan perintah query dalam database kemudian mengembalikan data hasil eksekusi query ke dalam object ResultSet.

Berikut ini adalah contoh kode untuk membuat instance class Statement, kemudian menjalankan query untuk mengambil data dari database yang hasilnya dipegang oleh ResultSet :

Statement statement =
conn.createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY);
ResulSet rs =
statement.executeQuery(“select * from Customers”);

ResultSet akan meletakkan kursornya (posisi pembacaan baris) di sebuah posisi sebelum baris pertama. Untuk menggerakkan kursor maju, mundur, ke suatu posisi relatif atau ke suatu posisi absolute tertentu, gunakan method-method dari ResultSet:

● next() -- mengarahkan kursor maju satu baris.
● previous() -- mengarahkan kursor mundur satu baris.
● first() -- mengarahkan kursor ke baris pertama.
● last() -- mengarahkan kursor ke baris terakhir.
● beforeFirst() -- mengarahkan kursor ke sebelum baris pertama.
● afterLast() -- mengarahkan kursor ke setelah baris terakhir.
● relative(int rows) -- mengarahkan kursor relatif dari posisinya yang sekarang. Set nilai rows dengan nilai positif untuk maju, dan nilai negatif untuk mundur.
● absolute(int rowNumber) – mengarahkan kursor ke posisi tertentu sesuai dengan nilai rowNumber, dan tentu saja nilainya harus positif.

Interface ResultSet menyediakan method getter untuk mengakses nilai dari setiap kolom dalam baris yang sedang aktif. Parameter fungsi getter bisa menerima nilai index dari kolom ataupun nama kolomnya. Namun begitu, penggunaan nilai index lebih efisien dibanding menggunakan nama kolom.

Nilai index dimulai dengan satu hingga banyaknya kolom. Penggunaan nama kolom adalah case insensitive, artinya huruf kecil atau huruf besar tidak menjadi masalah.

getString digunakan untuk mengambil kolom dengan tiper data char, varchar atau tipe data string lainya. getInt digunakan untuk mengambil kolom dengan tipe data integer.

Berikut ini dalah contoh program lengkap dari melakukan koneksi hingga mengambil data dari database.

Class.forName(“com.mysql.jdbc.Driver);
Connection conn =
DriverManager.getConnection(
“jdbc:mysql://localhost:3306/latihan”,
”root”,””);
Statement statement =
conn.createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY);
ResulSet rs =
statement.executeQuery(“select * from Customers”);
while(rs.next()){
System.out.println(rs.getInt(“id”));
System.out.println(rs.getString(“Nama”));
}

Method executeQuery hanya dapat menjalankan perintah SQL select, gunakan method executeUpdate untuk menjalankan perintah insert, update dan delete. Hasil dari eksekusi insert, update dan delete tidak mengembalikan result set, tetapi mengembalikan sebuah nilai integer yang merepresentasikan
status hasil eksekusi method executeUpdate.

Berikut ini contoh insert, update dan delete :

result = statement.executeUpdate(
"update Customers set nama ='roby' where
nama='andy'");
result = statement.executeUpdate(
"delete Customers where nama='andy'");

Menggunakan executeQuery dan executeUpdate sangat mudah dan fleksible, namun sangat tidak efisien, PreparedStatement menawarkan keunggulan dalam bentuk efisiensi.

1 komentar:

  1. bang kalo mau ambil record dari database dengan textfield, misal dari nim nanti bisa liat nama dan kelas nya yang di simpan di database dengan memperlihatkan dari database.

    BalasHapus