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
- public class Person {
- private Account account;
- private String name;
- private int age;
- }
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):
- Tampilkan semua kolom dari Tabel tersebut
- Tampilkan jumlah amount dan credit dari accountnya Linda.
- Tampilkan nama serta jumlah credit yang kurang dari 100.
- Tampilkan nama serta jumlah amount atau credit yang kurang dari 100.
- Tampilkan nama yang umurnya antara 40-50 dan creditnya diatas 1000
- 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:
- package bank;
- /**
- *
- * @author Team_dakoop
- */
- public class Person {
- private Account account;
- private String Name;
- private int Age;
- public Person(String name, int age){
- this.Name = name;
- this.Age = age;
- this.account=null;
- }
- public String getName(){
- return Name;
- }
- public int getAge(){
- return Age;
- }
- public void setAccount(Account account){
- this.account = account;
- }
- public Account getAccount(){
- return account;
- }
- public String toString(){
- return Name+"/"+Age+"/"+account;
- }
- }
Berikut ini kode program dari Class Account:
- package bank;
- /**
- *
- * @author Team_dakoop
- */
- public class Account {
- private double Amount;
- private double Credit;
- public Account(double amount, double credit){
- this.Amount=amount;
- this.Credit = credit;
- }
- public double getAmount(){
- return Amount;
- }
- public double getCredit(){
- return Credit;
- }
- public String toString(){
- return Amount+"/"+Credit;
- }
- }
Solusi Query ke-1
Tampilkan semua kolom dari Tabel tersebut
Perintah SQL dalam DBMS:
SELECT *
FROM Person;
Object Query dalam Db4o:
- ObjectSet persons = db.query(new Predicate()
- {
- public boolean match(Person person) {
- return true;
- }
- });
Hasil Query ke-1
- Query 1 : SELECT * FROM Person;
- Hasil : 6
- Rossi/28/1500.0/500.0
- Tony/35/2500.0/300.0
- James/42/1250.0/50.0
- Heinz/20/1500.0/500.0
- Eric/22/150.0/0.0
- 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:
- ObjectSet persons = db.query(new Predicate()
- {
- public boolean match(Person person) {
- return person.getName().equals("Linda");
- }
- });
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:
- ObjectSet persons = db.query(new Predicate()
- {
- public boolean match(Person person) {
- return person.getAccount().getCredit() <>
- }
- });
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:
- ObjectSet persons = db.query(new Predicate()
- {
- public boolean match(Person person) {
- return person.getAccount().getAmount() <>
- person.getAccount().getCredit() <>
- }
- });
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:
- ObjectSet persons = db.query(new Predicate()
- {
- public boolean match(Person person) {
- return person.getAge() >= 40
- && person.getAge() <= 50
- && person.getAccount().getCredit() > 1000.0;
- }
- });
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:
- ObjectSet Subpersons = db.query(new Predicate()
- {
- public boolean match(Person person) {
- return person.getName().equals("Rossi");
- }
- });
- while (Subpersons.hasNext())
- {
- final Person persons = (Person)Subpersons.next();
- ObjectSet Objperson = db.query(new Predicate()
- {
- public boolean match(Person p) {
- return p.getAccount().getAmount() ==
- persons.getAccount().getAmount()
- && p.getName() != "Heinz" ;
- }
- });
- }
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
- package bank;
-
- /**
- *
- * @author Team_dakoop
- */
- import com.db4o.*;
- import com.db4o.query.*;
- import java.io.File;
-
- public class Main {
-
- /**
- * @param args the command line arguments
- */
- public static void main(String[] args) {
- // TODO code application logic here
- InsertData();
- Query1();
- Query2();
- Query3();
- Query4();
- Query5();
- Query6();
- }
- public static void InsertData(){
- new File("Person.yap").delete();
- ObjectContainer db = Db4o.openFile("Person.yap");
- Account a1 = new Account(1500, 500);
- Person p1 = new Person("Heinz", 20);
- p1.setAccount(a1);
- Account a2 = new Account(5000, 1500);
- Person p2 = new Person("Linda", 45);
- p2.setAccount(a2);
- Person p3 = new Person("Eric", 22);
- Account a3 = new Account(150, 0);
- p3.setAccount(a3);
- Person p4 = new Person("James", 42);
- Account a4 = new Account(1250, 50);
- p4.setAccount(a4);
- Person p5 = new Person("Tony", 35);
- Account a5 = new Account(2500, 300);
- p5.setAccount(a5);
- Person p6 = new Person("Rossi", 28);
- Account a6 = new Account(1500, 500);
- p6.setAccount(a6);
- db.set(p1);db.set(p2);db.set(p3);db.set(p4);db.set(p5);db.set(p6);
- db.close();
- System.out.println("Data Person sudah tersimpan");
- }
- public static void Query1(){
- ObjectContainer db = Db4o.openFile("Person.yap");
- ObjectSet persons = db.query(new Predicate()
- {
- public boolean match(Person person) {
- return true;
- }
- });
- System.out.println("Query 1 : SELECT * FROM Person;");
- System.out.println("Hasil : " + persons.size());
- while (persons.hasNext()){
- System.out.println(persons.next());
- }
- db.close();
- }
-
- public static void Query2(){
- ObjectContainer db = Db4o.openFile("Person.yap");
- ObjectSet persons = db.query(new Predicate()
- {
- public boolean match(Person person) {
- return person.getName().equals("Linda");
- }
- });
- System.out.println("Query 2 : SELECT Amount,Credit FROM Person WHERE Name = 'Linda';");
- System.out.println("Hasil : " + persons.size()+" record");
- while (persons.hasNext()){
- Person person = (Person)persons.next();
- System.out.println(person.getAccount());
- }
- db.close();
- }
-
-
- public static void Query3(){
- ObjectContainer db = Db4o.openFile("Person.yap");
- ObjectSet persons = db.query(new Predicate()
- {
- public boolean match(Person person) {
- return person.getAccount().getCredit() <>
- }
- });
- System.out.println("Query 3 : SELECT Name, Credit FROM Person WHERE Credit <>
- System.out.println("Hasil : " + persons.size()+" record");
- while (persons.hasNext()){
- Person person = (Person)persons.next();
- System.out.println(person.getName()+"/"+ person.getAccount().getCredit());
- }
- db.close();
- }
- public static void Query4(){
- ObjectContainer db = Db4o.openFile("Person.yap");
- ObjectSet persons = db.query(new Predicate()
- {
- public boolean match(Person person) {
- return person.getAccount().getAmount() <>
- }
- });
- System.out.println("Query 4 : SELECT Name, Amount, Credit FROM Person WHERE Amount <>
- System.out.println("Hasil : " + persons.size()+" record");
- while (persons.hasNext()){
- Person person = (Person)persons.next();
- System.out.println(person.getName()+"/"+ person.getAccount());
- }
- db.close();
- }
-
- public static void Query5(){
- ObjectContainer db = Db4o.openFile("Person.yap");
- ObjectSet persons = db.query(new Predicate()
- {
- public boolean match(Person person) {
- return person.getAge() >= 40
- && person.getAge() <= 50
- && person.getAccount().getCredit() > 1000.0;
- }
- });
- System.out.println("Query 5 : SELECT Name FROM Person WHERE (Age Between 40 AND 50) AND (Credit > 1000);");
- System.out.println("Hasil : " + persons.size()+" record");
- while (persons.hasNext()){
- Person person = (Person)persons.next();
- System.out.println(person.getName());
- }
- db.close();
- }
- public static void Query6(){
- ObjectContainer db = Db4o.openFile("Person.yap");
- ObjectSet Subpersons = db.query(new Predicate()
- {
- public boolean match(Person person) {
- return person.getName().equals("Rossi");
- }
- });
- while (Subpersons.hasNext())
- {
- final Person persons = (Person)Subpersons.next();
- ObjectSet Objperson = db.query(new Predicate()
- {
- public boolean match(Person p) {
- return p.getAccount().getAmount() == persons.getAccount().getAmount()
- && p.getName() != "Heinz" ;
- }
- });
- System.out.println("Query 6 :");
- System.out.println("SELECT Name, Age");
- System.out.println("FROM Person");
- System.out.println("WHERE Not( Name = ‘Heinz’) AND Amount IN (");
- System.out.println(" SELECT Amount");
- System.out.println(" FROM Person");
- System.out.println(" WHERE Name = ‘Heinz’);");
- System.out.println("Hasil : " + Objperson.size()+" record");
- while (Objperson.hasNext()){
- Person person = (Person)Objperson.next();
- System.out.println(person.getName());
- }
- }
- db.close();
- }
- }
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:
Posting Komentar