Rabu, 19 November 2008

Sorting dalam Database Db4o

Pada kesempatan kali ini, penulis akan menunjukkan cara melakukan Pengurutan (Sortir) Object Query di dalam database Db4o.

Misalkan dalam suatu DBMS terdapat table Barang seperti berikut:



Dari table tersebut, akan diurutkan berdasarkan Nama barang dan Harga secara Ascending dan Descending.


Karena kita menggunakan Object Database Db4o maka tabel tersebut dibuat sebagai suatu Class.


Berikut ini kode program dari Class Barang (dari Bagian I):


  1. package barang;
  2. /**
  3. *
  4. @author team_dakoop
  5. */
  6. public class Barang {
  7. String KodeBarang;
  8. String NamaBarang;
  9. String Jenis;
  10. double HargaSatuan;
  11. String Supplier;

  12. public Barang(String kd,String nm, String jns,
  13. double hrg, String sup){
  14. this.KodeBarang = kd;
  15. this.NamaBarang = nm;
  16. this.Jenis =jns;
  17. this.HargaSatuan =hrg;
  18. this.Supplier = sup;
  19. }

  20. public String getKodeBarang(){
  21. return KodeBarang;
  22. }
  23. public String getNamaBarang(){
  24. return NamaBarang;
  25. }
  26. public String getJenis(){
  27. return Jenis;
  28. }
  29. public double getHarga(){
  30. return HargaSatuan;
  31. }
  32. public String getSupplier(){
  33. return Supplier;
  34. }
  35. public String toString(){
  36. return KodeBarang+"/"+NamaBarang+"/"+Jenis+"/"+
  37. String.valueOf(HargaSatuan)+"/"+Supplier;
  38. }
  39. }


Buat desain form seperti yang terlihat pada gambar berikut, pada form (JFrame1) terdapat komponen-komponen sebagai berikut:

  • JRadioButton (4 buah)
  • JButtonGroup (2 buah)
  • JPanel (2 buah)
  • JButton (1 buah)
  • JTabel (1 buah)




Pada project kali ini penulis menggunakan ketentuan nama komponen sebagai berikut untuk memudahkan pemahaman dalam pembuatan kode program.



Komponen

Text

Name

JRadioButton1

Ascending

optAsc

JRadioButton2

Descending

optDsc

JRadioButton3

Nama Barang

optNama

JRadioButton4

Harga Satuan

optHarga

JFrame1

Aplikasi Barang

FrmBarang

JButton1

Tampil

cmdTampil



Jika komponen JButtonGroup sudah diletakkan pada form (setelah peletakan ke form tidak akan terlihat, namun pada bagian Inspector akan kelihatan) maka klik pada komponen optAsc dan optDsc kemudian pada properties cari button group kemudian ubah menjadi buttonGroup1. begitu juga untuk komponen optNama dan optHarga.



Pada komponen JTabel, disesuaikan kolomnya dengan Class Barang. Caranya pada bagian properties Model, ditambahkan field-field yang bersesuaian. Untuk lebih jelasnya lihat pada gambar berikut:





Setelah anda mengubah nama setiap komponen maka sekarang saatnya masuk pada proses Coding.


Dibawah package anda ketikkan perintah import berikut untuk menggunakan object database Db4o dan unit-unit lainnya.

  1. package appbarang;

  2. /**
  3. *
  4. * @author team_dakoop
  5. */
  6. import com.db4o.*;
  7. import com.db4o.query.*;
  8. import java.io.File;


Kemudian buat sebuah procedure untuk menginsert data ke dalam object database, kode programmnya sebagai berikut:


  1. public static void InsertData(){
  2. new File("Barang.yap").delete();
  3. ObjectContainer db = Db4o.openFile("Barang.yap");
  4. Barang barang1 = new Barang("M33",
  5. "Mie Goreng Ayam","Mie",1200,"Fastfood");
  6. Barang barang2 = new Barang("S03",
  7. "Sun Silk","Shampo",6500,"UniClean");
  8. Barang barang3 = new Barang("M11",
  9. "Mie Goreng Ayam","Mie",1000,"FlyFood");
  10. Barang barang4 = new Barang("K31",
  11. "Kopi cap API","Kopi",2700,"Obor");
  12. Barang barang5 = new Barang("T01",
  13. "Teh Aroma Wangi","Teh",4500,"UniClean");
  14. Barang barang6 = new Barang("M02",
  15. "Soto Mie","Mie",1100,"Fastfood");
  16. Barang barang7 = new Barang("M51",
  17. "Mie Kari","Mie",1300,"FlyFood");
  18. Barang barang8 = new Barang("K21",
  19. "Kopi cap Wangi","Kopi",7500,"Uniclean");
  20. Barang barang9 = new Barang("T05",
  21. "Teh T-Melati","Teh",5500,"Obor");
  22. Barang barang10 = new Barang("M82",
  23. "Mie Bakso","Mie",1200,"Fastfood");
  24. db.set(barang1);db.set(barang2);
  25. db.set(barang3);db.set(barang4);
  26. db.set(barang5);db.set(barang6);
  27. db.set(barang7);db.set(barang8);
  28. db.set(barang9);db.set(barang10);
  29. db.close();
  30. System.out.println("Data Barang
  31. sudah tersimpan pada Object Database");
  32. }

Kemudian ketikkan lagi sebuah procedure yang gunanya untuk menampilkan record-record ke dalam tabel grid.


  1. private void ShowTable(){
  2. ObjectContainer db = Db4o.openFile("Barang.yap");
  3. try
  4. {
  5. Query qry = db.query();
  6. qry.constrain(Barang.class);
  7. ObjectSet res = qry.execute();
  8. Object[][] x = new Object[res.size()][6];
  9. jTable1.setModel(
  10. new javax.swing.table.DefaultTableModel
  11. (x, new String []
  12. {"Kode Barang","Nama Barang","Jenis",
  13. "Harga Satuan","Supplier"}));
  14. int y=0;
  15. while (res.hasNext())
  16. {
  17. Barang b = (Barang) res.next();
  18. jTable1.setValueAt(b.getKodeBarang() ,y,0);
  19. jTable1.setValueAt(b.getNamaBarang() ,y,1);
  20. jTable1.setValueAt(b.getJenis() ,y,2);
  21. jTable1.setValueAt(String.valueOf(
  22. b.getHarga()) ,y,3);
  23. jTable1.setValueAt(b.getSupplier() ,y,4);
  24. y++;
  25. }
  26. }
  27. finally
  28. {
  29. db.close();
  30. }
  31. }


Nah, satu lagi procedure yang sebenarnya pengembangan dari procedure sebelumnya, yaitu digunakan untuk menampilkan tabel hasil sortir. Kode programnya sebagai berikut:

  1. private void SortTable(){
  2. ObjectContainer db = Db4o.openFile("Barang.yap");
  3. try
  4. {
  5. Query qry = db.query();
  6. qry.constrain(Barang.class);
  7. if (optNama.isSelected() == true ){
  8. if (optAsc.isSelected() == true){
  9. qry.descend(
  10. "NamaBarang").orderAscending();
  11. }
  12. else
  13. {
  14. qry.descend(
  15. "NamaBarang").orderDescending();
  16. }
  17. }
  18. else
  19. {
  20. if (optAsc.isSelected() == true){
  21. qry.descend(
  22. "HargaSatuan").orderAscending();
  23. }
  24. else
  25. {
  26. qry.descend(
  27. "HargaSatuan").orderDescending();
  28. }
  29. }
  30. ObjectSet res = qry.execute();
  31. Object[][] x = new Object[res.size()][6];
  32. jTable1.setModel(
  33. new javax.swing.table.DefaultTableModel
  34. (x, new String []
  35. {"Kode Barang","Nama Barang","Jenis",
  36. "Harga Satuan","Supplier"}));
  37. int y=0;
  38. while (res.hasNext())
  39. {
  40. Barang b = (Barang) res.next();
  41. jTable1.setValueAt(b.getKodeBarang() ,y,0);
  42. jTable1.setValueAt(b.getNamaBarang() ,y,1);
  43. jTable1.setValueAt(b.getJenis() ,y,2);
  44. jTable1.setValueAt(String.valueOf(
  45. b.getHarga()) ,y,3);
  46. jTable1.setValueAt(b.getSupplier() ,y,4);
  47. y++;
  48. }
  49. }
  50. finally
  51. {
  52. db.close();
  53. }
  54. }


Setelah procedure tersebut dibuat maka saatnya kita masuk ke tombol Tampil. Ketikkan kode program berikut :

  1. private void cmdTampilActionPerformed(
  2. java.awt.event.ActionEvent evt) {
  3. // TODO add your handling code here:
  4. SortTable();
  5. }


Nah, sekarang pada program utama yaitu di file main.java, tambahkan kode program seperti tampak berikut:


  1. package appbarang;

  2. /**
  3. *
  4. * @author team_dakoop
  5. */
  6. public class Main {

  7. /**
  8. * @param args the command line arguments
  9. */
  10. public static void main(String[] args) {
  11. // TODO code application logic here
  12. new FrmBarang().setVisible(true);
  13. }
  14. }


Penjelasan mengenai Sortir pada Object Database Db4o


Sortir pada Object Db4o dapat menggunakan Object Query SODA API yang telah disediakan oleh Db4o. Adapun penulisannya sebagai berikut:


Sort secara Ascending


  1. Query query=db.query();
  2. query.constrain(NamaClass.class);
  3. query.descend("NamaAtribut").orderAscending();
  4. ObjectSet result=query.execute();


Sort secara Descending


  1. Query query=db.query();
  2. query.constrain(NamaClass.class);
  3. query.descend("NamaAtribut").orderDescending();
  4. ObjectSet result=query.execute();


Hasil Output program:




Referensi

Db4o-5.2 Tutorial, db4objects Inc., USA


Irwanto, Djon., 2007, Membangun Object Oriented Software dengan Java dan Object Database, PT Elex Media Komputindo, Jakarta






1 komentar:

Anonim mengatakan...

Bagus tutorialnnya tapi sayang penulisannya agak kurang teratur. Maaf kalo salah