Selasa, 02 Desember 2008

Native Query pada DB4O

Native query merupakan pengembangan dari Object Query sebelumnya. Di mana object query sebelumnya memiliki banyak kekurangan diantaranya pengecekan kesalahan dan keamanan dari query.


Dimisalkan ada relationship antar object, yaitu:




Diasumsikan bahwa seorang Person memiliki suatu Account di suatu bank. Maka relationship yang akan dibuat akan membentuk dua class dengan attribute seperti berikut:



Class Account

public class Account {
private double amount;
private double credit;
}



Class Person

  1. public class Person {
  2. private Account account;
  3. private String name;
  4. private int age;
  5. }


Misalkan Object Personnya sebagai berikut:





Dari data table tersebut, Tuliskan Query di bawah ini dengan perintah SQL (untuk DBMS) dan Native Query (Object Database Db4o):

  1. Tampilkan semua kolom dari Tabel tersebut
  2. Tampilkan jumlah amount dan credit dari accountnya Linda.
  3. Tampilkan nama serta jumlah credit yang kurang dari 100.
  4. Tampilkan nama serta jumlah amount atau credit yang kurang dari 100.
  5. Tampilkan nama yang umurnya antara 40-50 dan creditnya diatas 1000
  6. Tampilkan nama serta umurnya yang Amount sama dengan nasabah Heinz.


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


Berikut ini kode program dari Class Person:


  1. package bank;
  2. /**
  3. *
  4. * @author Team_dakoop
  5. */
  6. public class Person {
  7. private Account account;
  8. private String Name;
  9. private int Age;
  10. public Person(String name, int age){
  11. this.Name = name;
  12. this.Age = age;
  13. this.account=null;
  14. }
  15. public String getName(){
  16. return Name;
  17. }
  18. public int getAge(){
  19. return Age;
  20. }
  21. public void setAccount(Account account){
  22. this.account = account;
  23. }
  24. public Account getAccount(){
  25. return account;
  26. }
  27. public String toString(){
  28. return Name+"/"+Age+"/"+account;
  29. }
  30. }


Berikut ini kode program dari Class Account:


  1. package bank;
  2. /**
  3. *
  4. * @author Team_dakoop
  5. */
  6. public class Account {
  7. private double Amount;
  8. private double Credit;
  9. public Account(double amount, double credit){
  10. this.Amount=amount;
  11. this.Credit = credit;
  12. }
  13. public double getAmount(){
  14. return Amount;
  15. }
  16. public double getCredit(){
  17. return Credit;
  18. }
  19. public String toString(){
  20. return Amount+"/"+Credit;
  21. }
  22. }


Solusi Query ke-1

Tampilkan semua kolom dari Tabel tersebut

Perintah SQL dalam DBMS:

SELECT *
FROM Person;


Object Query dalam Db4o:

  1. ObjectSet persons = db.query(new Predicate()
  2. {
  3. public boolean match(Person person) {
  4. return true;
  5. }
  6. });


Hasil Query ke-1

  1. Query 1 : SELECT * FROM Person;
  2. Hasil : 6
  3. Rossi/28/1500.0/500.0
  4. Tony/35/2500.0/300.0
  5. James/42/1250.0/50.0
  6. Heinz/20/1500.0/500.0
  7. Eric/22/150.0/0.0
  8. Linda/45/5000.0/1500.0


Solusi Query ke-2

Tampilkan jumlah amount dan credit dari accountnya Linda.


Perintah SQL dalam DBMS:

SELECT Amount, Credit
FROM Person
WHERE Name = ‘Linda’;


Object Query dalam Db4o:

  1. ObjectSet persons = db.query(new Predicate()
  2. {
  3. public boolean match(Person person) {
  4. return person.getName().equals("Linda");
  5. }
  6. });

Hasil Query ke-2

Query 2 : SELECT Amount,Credit FROM Person WHERE Name = 'Linda';
Hasil : 1 record
5000.0/1500.0



Solusi Query ke-3

Tampilkan nama serta jumlah credit yang kurang dari 100.


Perintah SQL dalam DBMS:

SELECT Name, Credit
FROM Person
WHERE Credit <>


Object Query dalam Db4o:


  1. ObjectSet persons = db.query(new Predicate()
  2. {
  3. public boolean match(Person person) {
  4. return person.getAccount().getCredit() <>
  5. }
  6. });


Hasil Query ke-3

Query 3 : SELECT Name, Credit FROM Person WHERE Credit <>


Solusi Query ke-4

Tampilkan nama serta jumlah amount atau credit yang kurang dari 100.


Perintah SQL dalam DBMS:

SELECT Name, Amount, Credit
FROM Person
WHERE Amount <>


Object Query dalam Db4o:


  1. ObjectSet persons = db.query(new Predicate()
  2. {
  3. public boolean match(Person person) {
  4. return person.getAccount().getAmount() <>
  5. person.getAccount().getCredit() <>
  6. }
  7. });



Hasil Query ke-4

Query 4 : SELECT Name, Amount, Credit FROM Person WHERE Amount <>

Solusi Query ke-5

Tampilkan nama yang umurnya antara 40-50 dan creditnya diatas 1000


Perintah SQL dalam DBMS:

SELECT Name
FROM Person
WHERE (Age between 40 AND 50) AND (Credit > 1000);


Object Query dalam Db4o:

  1. ObjectSet persons = db.query(new Predicate()
  2. {
  3. public boolean match(Person person) {
  4. return person.getAge() >= 40
  5. && person.getAge() <= 50
  6. && person.getAccount().getCredit() > 1000.0;
  7. }
  8. });


Hasil Query ke-5

Query 5 : SELECT Name FROM Person WHERE (Age Between 40 AND 50) AND (Credit > 1000);
Hasil : 1 record
Linda



Solusi Query ke-6

Tampilkan nama serta umurnya yang Amount sama dengan nasabah Heinz.


Perintah SQL dalam DBMS:

SELECT Name, Age
FROM Person
WHERE Not( Name = ‘Heinz’) AND Amount IN (
SELECT Amount
FROM Person
WHERE Name = ‘Heinz’);


Object Query dalam Db4o:

  1. ObjectSet Subpersons = db.query(new Predicate()
  2. {
  3. public boolean match(Person person) {
  4. return person.getName().equals("Rossi");
  5. }
  6. });
  7. while (Subpersons.hasNext())
  8. {
  9. final Person persons = (Person)Subpersons.next();
  10. ObjectSet Objperson = db.query(new Predicate()
  11. {
  12. public boolean match(Person p) {
  13. return p.getAccount().getAmount() ==
  14. persons.getAccount().getAmount()
  15. && p.getName() != "Heinz" ;
  16. }
  17. });
  18. }



Hasil Query ke-6

Query 6 :
SELECT Name, Age
FROM Person
WHERE Not( Name = ‘Heinz’) AND Amount IN (
SELECT Amount
FROM Person
WHERE Name = ‘Heinz’);
Hasil : 1 record
Rossi




Full Source Code

  1. package bank;

  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. /**
  11. * @param args the command line arguments
  12. */
  13. public static void main(String[] args) {
  14. // TODO code application logic here
  15. InsertData();
  16. Query1();
  17. Query2();
  18. Query3();
  19. Query4();
  20. Query5();
  21. Query6();
  22. }
  23. public static void InsertData(){
  24. new File("Person.yap").delete();
  25. ObjectContainer db = Db4o.openFile("Person.yap");
  26. Account a1 = new Account(1500, 500);
  27. Person p1 = new Person("Heinz", 20);
  28. p1.setAccount(a1);
  29. Account a2 = new Account(5000, 1500);
  30. Person p2 = new Person("Linda", 45);
  31. p2.setAccount(a2);
  32. Person p3 = new Person("Eric", 22);
  33. Account a3 = new Account(150, 0);
  34. p3.setAccount(a3);
  35. Person p4 = new Person("James", 42);
  36. Account a4 = new Account(1250, 50);
  37. p4.setAccount(a4);
  38. Person p5 = new Person("Tony", 35);
  39. Account a5 = new Account(2500, 300);
  40. p5.setAccount(a5);
  41. Person p6 = new Person("Rossi", 28);
  42. Account a6 = new Account(1500, 500);
  43. p6.setAccount(a6);
  44. db.set(p1);db.set(p2);db.set(p3);db.set(p4);db.set(p5);db.set(p6);
  45. db.close();
  46. System.out.println("Data Person sudah tersimpan");
  47. }
  48. public static void Query1(){
  49. ObjectContainer db = Db4o.openFile("Person.yap");
  50. ObjectSet persons = db.query(new Predicate()
  51. {
  52. public boolean match(Person person) {
  53. return true;
  54. }
  55. });
  56. System.out.println("Query 1 : SELECT * FROM Person;");
  57. System.out.println("Hasil : " + persons.size());
  58. while (persons.hasNext()){
  59. System.out.println(persons.next());
  60. }
  61. db.close();
  62. }

  63. public static void Query2(){
  64. ObjectContainer db = Db4o.openFile("Person.yap");
  65. ObjectSet persons = db.query(new Predicate()
  66. {
  67. public boolean match(Person person) {
  68. return person.getName().equals("Linda");
  69. }
  70. });
  71. System.out.println("Query 2 : SELECT Amount,Credit FROM Person WHERE Name = 'Linda';");
  72. System.out.println("Hasil : " + persons.size()+" record");
  73. while (persons.hasNext()){
  74. Person person = (Person)persons.next();
  75. System.out.println(person.getAccount());
  76. }
  77. db.close();
  78. }


  79. public static void Query3(){
  80. ObjectContainer db = Db4o.openFile("Person.yap");
  81. ObjectSet persons = db.query(new Predicate()
  82. {
  83. public boolean match(Person person) {
  84. return person.getAccount().getCredit() <>
  85. }
  86. });
  87. System.out.println("Query 3 : SELECT Name, Credit FROM Person WHERE Credit <>
  88. System.out.println("Hasil : " + persons.size()+" record");
  89. while (persons.hasNext()){
  90. Person person = (Person)persons.next();
  91. System.out.println(person.getName()+"/"+ person.getAccount().getCredit());
  92. }
  93. db.close();
  94. }
  95. public static void Query4(){
  96. ObjectContainer db = Db4o.openFile("Person.yap");
  97. ObjectSet persons = db.query(new Predicate()
  98. {
  99. public boolean match(Person person) {
  100. return person.getAccount().getAmount() <>
  101. }
  102. });
  103. System.out.println("Query 4 : SELECT Name, Amount, Credit FROM Person WHERE Amount <>
  104. System.out.println("Hasil : " + persons.size()+" record");
  105. while (persons.hasNext()){
  106. Person person = (Person)persons.next();
  107. System.out.println(person.getName()+"/"+ person.getAccount());
  108. }
  109. db.close();
  110. }

  111. public static void Query5(){
  112. ObjectContainer db = Db4o.openFile("Person.yap");
  113. ObjectSet persons = db.query(new Predicate()
  114. {
  115. public boolean match(Person person) {
  116. return person.getAge() >= 40
  117. && person.getAge() <= 50
  118. && person.getAccount().getCredit() > 1000.0;
  119. }
  120. });
  121. System.out.println("Query 5 : SELECT Name FROM Person WHERE (Age Between 40 AND 50) AND (Credit > 1000);");
  122. System.out.println("Hasil : " + persons.size()+" record");
  123. while (persons.hasNext()){
  124. Person person = (Person)persons.next();
  125. System.out.println(person.getName());
  126. }
  127. db.close();
  128. }
  129. public static void Query6(){
  130. ObjectContainer db = Db4o.openFile("Person.yap");
  131. ObjectSet Subpersons = db.query(new Predicate()
  132. {
  133. public boolean match(Person person) {
  134. return person.getName().equals("Rossi");
  135. }
  136. });
  137. while (Subpersons.hasNext())
  138. {
  139. final Person persons = (Person)Subpersons.next();
  140. ObjectSet Objperson = db.query(new Predicate()
  141. {
  142. public boolean match(Person p) {
  143. return p.getAccount().getAmount() == persons.getAccount().getAmount()
  144. && p.getName() != "Heinz" ;
  145. }
  146. });
  147. System.out.println("Query 6 :");
  148. System.out.println("SELECT Name, Age");
  149. System.out.println("FROM Person");
  150. System.out.println("WHERE Not( Name = ‘Heinz’) AND Amount IN (");
  151. System.out.println(" SELECT Amount");
  152. System.out.println(" FROM Person");
  153. System.out.println(" WHERE Name = ‘Heinz’);");
  154. System.out.println("Hasil : " + Objperson.size()+" record");
  155. while (Objperson.hasNext()){
  156. Person person = (Person)Objperson.next();
  157. System.out.println(person.getName());
  158. }
  159. }
  160. db.close();
  161. }
  162. }


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: