Rabu, 19 November 2008

Object Query dalam Database Db4o - Section 1

Banyak DBMS yang memiliki fasilitas SQL untuk mengakses data. Begitu juga dengan Object Oriented Database.

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


Misalkan dalam suatu DBMS terdapat table Barang seperti berikut:




Dari table tersebut, Tuliskan Query di bawah ini dengan perintah SQL:

  1. Tampilkan semua kolom dari Tabel tersebut
  2. Tampilkan semua kolom dari Tabel tersebut yang jenis barangnya berupa Mie.
  3. Tampilkan kode barang dan nama barang dari Tabel tersebut yang jenis barangnya selain Mie.
  4. Tampilkan nama-nama barang beserta harga satuan yang harganya diatas Rp.5000
  5. Tampilkan nama-nama barang beserta harga satuannya untuk jenis kopi atau teh.
  6. Tampilkan nama-nama barang beserta harga satuannya yang jenis barangnya Mie dan disuplai oleh Fastfood
  7. Tampilkan kode barang dan nama barang jenis Teh yang harga satuannya antara 1000 sampai dengan 5000
Karena kita menggunakan Object Database Db4o maka tabel tersebut dibuat sebagai suatu Class.

Berikut ini kode program dari Class Barang:

  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. }


Object Query

Db4o menyediakan tiga jenis Query yang dipakai untuk melakukan proses retrieving data object dari database. Ketiga jenis object query itu antara lain:

  • Query by Example (QBE)

  • Native Queries (NQ)

  • SODA Query API (SODA)

Pada kesempatan kali ini penulis menggunakan SODA Query API (SODA)


Solusi Query ke-1

Tampilkan semua kolom dari Tabel tersebut

Perintah SQL dalam DBMS:


SELECT *

FROM BARANG;


Object Query dalam Db4o:


Query Qry = db.query();
Qry.constrain(Barang.class);
while (Hasil.hasNext())
{
System.out.println(Hasil.next());
}


Hasil Query ke-1

Query 1 : SELECT * FROM BARANG
Hasil : 10 record

M82/Mie Bakso/Mie/1200.0/Fastfood
T05/Teh T-Melati/Teh/5500.0/Obor
K21/Kopi cap Wangi/Kopi/7500.0/Uniclean
M51/Mie Kari/Mie/1300.0/FlyFood
M02/Soto Mie/Mie/1100.0/Fastfood
T01/Teh Aroma Wangi/Teh/4500.0/UniClean
K31/Kopi cap API/Kopi/2700.0/Obor
M11/Mie Goreng Ayam/Mie/1000.0/FlyFood
S03/Sun Silk/Shampo/6500.0/UniClean
M33/Mie Goreng Ayam/Mie/1200.0/Fastfood



Solusi Query ke-2

Tampilkan semua kolom dari Tabel tersebut yang jenis barangnya berupa Mie.

Perintah SQL dalam DBMS:

SELECT *
FROM BARANG
WHERE Jenis = “Mie”;


Object Query dalam Db4o:


Query Qry = db.query();

Qry.constrain(Barang.class);
Qry.descend("Jenis").constrain("Mie");

while (Hasil.hasNext())
{
System.out.println(Hasil.next());
}

Hasil Query ke-2


Query 2 : SELECT * FROM Barang WHERE Jenis = 'Mie'
Hasil : 5 record

M82/Mie Bakso/Mie/1200.0/Fastfood
M51/Mie Kari/Mie/1300.0/FlyFood
M02/Soto Mie/Mie/1100.0/Fastfood
M11/Mie Goreng Ayam/Mie/1000.0/FlyFood
M33/Mie Goreng Ayam/Mie/1200.0/Fastfood


Solusi Query ke-3

Tampilkan kode barang dan nama barang dari Tabel tersebut yang jenis barangnya selain Mie.

Perintah SQL dalam DBMS:


SELECT KodeBarang, NamaBarang

FROM BARANG
WHERE NOT (Jenis = “Mie”);

Object Query dalam Db4o:


Query Qry = db.query();

Qry.constrain(Barang.class);
Qry.descend("Jenis").constrain("Mie").not();

while (Hasil.hasNext())
{
Barang brg = (Barang)Hasil.next();
System.out.println(brg.getKodeBarang() +"/"+
brg.getNamaBarang());
}


Hasil Query ke-3


Query 3 : SELECT KodeBarang, NamaBarang FROM Barang WHERE NOT (Jenis = 'Mie')
Hasil : 5 record

T05/Teh T-Melati
K21/Kopi cap Wangi
T01/Teh Aroma Wangi
K31/Kopi cap API
S03/Sun Silk


Solusi Query ke-4

Tampilkan nama-nama barang beserta harga satuan yang harganya diatas Rp.5000

Perintah SQL dalam DBMS:


SELECT NamaBarang, HargaSatuan
FROM BARANG
WHERE HargaSatuan > 5000;

Object Query dalam Db4o:

  1. Query Qry = db.query();
  2. Qry.constrain(Barang.class);
  3. Qry.descend("HargaSatuan").constrain(
  4. new Double(5000)).greater();

  5. while (Hasil.hasNext())
  6. {
  7. Barang brg = (Barang)Hasil.next();
  8. System.out.println(brg.getNamaBarang() +"/"+
  9. String.valueOf(brg.getHarga()));
  10. }


Hasil Query ke-4


Query 4 : SELECT NamaBarang, HargaSatuan FROM Barang WHERE HargaSatuan > 5000
Hasil : 3 record

Teh T-Melati/5500.0
Kopi cap Wangi/7500.0
Sun Silk/6500.0


Solusi Query ke-5

Tampilkan nama-nama barang beserta harga satuannya untuk jenis kopi atau teh.

Perintah SQL dalam DBMS:


SELECT NamaBarang, HargaSatuan
FROM BARANG
WHERE Jenis = “Kopi” OR Jenis = “Teh”;

Object Query dalam Db4o:

  1. Query Qry = db.query();
  2. Qry.constrain(Barang.class);
  3. Constraint Qry1 = Qry.descend("Jenis").constrain("Kopi");
  4. Qry.descend("Jenis").constrain("Teh").or(Qry1);

  5. while (Hasil.hasNext())
  6. {
  7. Barang brg = (Barang)Hasil.next();
  8. System.out.println(brg.getNamaBarang() +"/"+
  9. String.valueOf(brg.getHarga()));
  10. }

Hasil Query ke-5


Query 5 : SELECT NamaBarang, HargaSatuan FROM Barang WHERE Jenis = 'Kopi' OR
Jenis = 'Teh'

Hasil : 4 record

Teh T-Melati/5500.0
Kopi cap Wangi/7500.0
Teh Aroma Wangi/4500.0
Kopi cap API/2700.0


Solusi Query ke-6

Tampilkan nama-nama barang beserta harga satuannya yang jenis barangnya Mie dan disuplai oleh Fastfood

Perintah SQL dalam DBMS:


SELECT NamaBarang, HargaSatuan
FROM BARANG
WHERE Jenis = “Mie” AND Supplier = “Fastfood”;


Object Query dalam Db4o:

  1. Query Qry = db.query();
  2. Qry.constrain(Barang.class);
  3. Constraint Qry1 = Qry.descend("Jenis").constrain("Mie");
  4. Qry.descend("Supplier").constrain("Fastfood").and(Qry1);

  5. while (Hasil.hasNext())
  6. {
  7. Barang brg = (Barang)Hasil.next();
  8. System.out.println(brg.getNamaBarang() +"/"+
  9. String.valueOf(brg.getHarga()));
  10. }

Hasil Query ke-6


Query 6 : SELECT NamaBarang, HargaSatuan FROM Barang WHERE Jenis = 'Mie' AND
Supplier = 'Fastfood'

Hasil : 3 record

Mie Bakso/1200.0
Soto Mie/1100.0
Mie Goreng Ayam/1200.0


Solusi Query ke-7

Tampilkan kode barang dan nama barang jenis Teh yang harga satuannya antara 1000 sampai dengan 5000

Perintah SQL dalam DBMS:


SELECT KodeBarang, NamaBarang
FROM Barang
WHERE Jenis = "Teh" AND HargaSatuan between 1000 AND 5000;


Object Query dalam Db4o:

  1. Query Qry = db.query();
  2. Qry.constrain(Barang.class);
  3. Constraint Qry1 = Qry.descend("HargaSatuan").constrain(
  4. new Double(1000)).greater();
  5. Constraint Qry2 = Qry.descend("HargaSatuan").constrain(
  6. new Double(5000)).smaller();
  7. Qry.descend("Jenis").constrain("Teh").and(Qry1).and(Qry2);

  8. while (Hasil.hasNext())
  9. {
  10. Barang brg = (Barang)Hasil.next();
  11. System.out.println(brg.getKodeBarang() +"/"+
  12. brg.getNamaBarang());
  13. }


Hasil Query ke-7


Query 7 : SELECT KodeBarang, NamaBarang FROM Barang WHERE Jenis = 'Teh' AND Har
gaSatuan between 1000 AND 5000

Hasil : 1 record

T01/Teh Aroma Wangi


Berikut ini Kode Program Selengkapnya:


  1. package barang;
  2. /**
  3. *
  4. * @author team_dakoop
  5. */
  6. import com.db4o.*;
  7. import com.db4o.query.*;
  8. import java.io.File;
  9. public class Main {
  10. public static void main(String[] args) {
  11. InsertData();
  12. Query1();
  13. Query2();
  14. Query3();
  15. Query4();
  16. Query5();
  17. Query6();
  18. Query7();
  19. }
  20. public static void InsertData(){
  21. new File("Barang.yap").delete();
  22. ObjectContainer db = Db4o.openFile("Barang.yap");
  23. Barang barang1 = new Barang("M33",
  24. "Mie Goreng Ayam","Mie",1200,"Fastfood");
  25. Barang barang2 = new Barang("S03",
  26. "Sun Silk","Shampo",6500,"UniClean");
  27. Barang barang3 = new Barang("M11",
  28. "Mie Goreng Ayam","Mie",1000,"FlyFood");
  29. Barang barang4 = new Barang("K31",
  30. "Kopi cap API","Kopi",2700,"Obor");
  31. Barang barang5 = new Barang("T01",
  32. "Teh Aroma Wangi","Teh",4500,"UniClean");
  33. Barang barang6 = new Barang("M02",
  34. "Soto Mie","Mie",1100,"Fastfood");
  35. Barang barang7 = new Barang("M51",
  36. "Mie Kari","Mie",1300,"FlyFood");
  37. Barang barang8 = new Barang("K21",
  38. "Kopi cap Wangi","Kopi",7500,"Uniclean");
  39. Barang barang9 = new Barang("T05",
  40. "Teh T-Melati","Teh",5500,"Obor");
  41. Barang barang10 = new Barang("M82",
  42. "Mie Bakso","Mie",1200,"Fastfood");
  43. db.set(barang1);db.set(barang2);
  44. db.set(barang3);db.set(barang4);
  45. db.set(barang5);db.set(barang6);
  46. db.set(barang7);db.set(barang8);
  47. db.set(barang9);db.set(barang10);
  48. db.close();
  49. System.out.println("Data Barang
  50. sudah tersimpan pada Object Database");
  51. }
  52. public static void Query1(){
  53. ObjectContainer db = Db4o.openFile("Barang.yap");
  54. Query Qry = db.query();
  55. Qry.constrain(Barang.class);
  56. ObjectSet Hasil = Qry.execute();
  57. System.out.println("Query 1 :
  58. SELECT * FROM BARANG");
  59. TampilSemua(Hasil);
  60. db.close();
  61. }
  62. public static void Query2(){
  63. ObjectContainer db =
  64. Db4o.openFile("Barang.yap");
  65. Query Qry = db.query();
  66. Qry.constrain(Barang.class);
  67. Qry.descend("Jenis").constrain("Mie");
  68. ObjectSet Hasil = Qry.execute();
  69. System.out.println("Query 2 :
  70. SELECT * FROM Barang WHERE Jenis = 'Mie'");
  71. TampilSemua(Hasil);
  72. db.close();
  73. }
  74. public static void Query3(){
  75. ObjectContainer db =
  76. Db4o.openFile("Barang.yap");
  77. Query Qry = db.query();
  78. Qry.constrain(Barang.class);
  79. Qry.descend("Jenis").constrain("Mie").not();
  80. ObjectSet Hasil = Qry.execute();
  81. System.out.println("Query 3 :
  82. SELECT KodeBarang, NamaBarang
  83. FROM Barang WHERE NOT (Jenis = 'Mie')");
  84. System.out.println("Hasil : "+
  85. Hasil.size()+" record");
  86. while (Hasil.hasNext())
  87. {
  88. Barang brg = (Barang)Hasil.next();
  89. System.out.println(brg.getKodeBarang()
  90. +"/"+brg.getNamaBarang());
  91. }
  92. db.close();
  93. }
  94. public static void Query4(){
  95. ObjectContainer db =
  96. Db4o.openFile("Barang.yap");
  97. Query Qry = db.query();
  98. Qry.constrain(Barang.class);
  99. Qry.descend("HargaSatuan").constrain(new
  100. Double(5000)).greater();
  101. ObjectSet Hasil = Qry.execute();
  102. System.out.println("Query 4 :
  103. SELECT NamaBarang, HargaSatuan
  104. FROM Barang WHERE HargaSatuan > 5000");
  105. System.out.println("Hasil : "+
  106. Hasil.size()+" record");
  107. while (Hasil.hasNext())
  108. {
  109. Barang brg = (Barang)Hasil.next();
  110. System.out.println(brg.getNamaBarang()
  111. +"/"+String.valueOf(brg.getHarga()));
  112. }
  113. db.close();
  114. }
  115. public static void Query5(){
  116. ObjectContainer db =
  117. Db4o.openFile("Barang.yap");
  118. Query Qry = db.query();
  119. Qry.constrain(Barang.class);
  120. Constraint Qry1 =
  121. Qry.descend("Jenis").constrain("Kopi");
  122. Qry.descend("Jenis").constrain("Teh").or(Qry1);
  123. ObjectSet Hasil = Qry.execute();
  124. System.out.println("Query 5 :
  125. SELECT NamaBarang, HargaSatuan
  126. FROM Barang
  127. WHERE Jenis = 'Kopi' OR Jenis = 'Teh'");
  128. System.out.println("Hasil : "+
  129. Hasil.size()+" record");
  130. while (Hasil.hasNext())
  131. {
  132. Barang brg = (Barang)Hasil.next();
  133. System.out.println(brg.getNamaBarang()+
  134. "/"+String.valueOf(brg.getHarga()));
  135. }
  136. db.close();
  137. }

  138. public static void Query6(){
  139. ObjectContainer db =
  140. Db4o.openFile("Barang.yap");
  141. Query Qry = db.query();
  142. Qry.constrain(Barang.class);
  143. Constraint Qry1 =
  144. Qry.descend("Jenis").constrain("Mie");
  145. Qry.descend("Supplier").constrain(
  146. "Fastfood").and(Qry1);

  147. ObjectSet Hasil = Qry.execute();
  148. System.out.println("Query 6 :
  149. SELECT NamaBarang, HargaSatuan
  150. FROM Barang
  151. WHERE Jenis = 'Mie' AND
  152. Supplier = 'Fastfood'");
  153. System.out.println("Hasil : "+
  154. Hasil.size()+" record");
  155. while (Hasil.hasNext())
  156. {
  157. Barang brg = (Barang)Hasil.next();
  158. System.out.println(brg.getNamaBarang()
  159. +"/"+String.valueOf(brg.getHarga()));
  160. }
  161. db.close();
  162. }


  163. public static void Query7(){
  164. ObjectContainer db =
  165. Db4o.openFile("Barang.yap");
  166. Query Qry = db.query();
  167. Qry.constrain(Barang.class);
  168. Constraint Qry1 =
  169. Qry.descend("HargaSatuan").constrain(
  170. new Double(1000)).greater();
  171. Constraint Qry2 =
  172. Qry.descend("HargaSatuan").constrain(
  173. new Double(5000)).smaller();
  174. Qry.descend("Jenis").constrain(
  175. "Teh").and(Qry1).and(Qry2);
  176. ObjectSet Hasil = Qry.execute();
  177. System.out.println("Query 7 :
  178. SELECT KodeBarang, NamaBarang
  179. FROM Barang
  180. WHERE Jenis = 'Teh' AND
  181. HargaSatuan between 1000 AND 5000");
  182. System.out.println("Hasil : "+
  183. Hasil.size()+" record");
  184. while (Hasil.hasNext())
  185. {
  186. Barang brg = (Barang)Hasil.next();
  187. System.out.println(brg.getKodeBarang()
  188. +"/"+brg.getNamaBarang());
  189. }
  190. db.close();
  191. }
  192. public static void TampilSemua(ObjectSet Hasil){
  193. System.out.println("Hasil : "+
  194. Hasil.size()+" record");
  195. while (Hasil.hasNext())
  196. {
  197. System.out.println(Hasil.next());
  198. }
  199. }
  200. }



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






Tidak ada komentar: