Wednesday, December 10, 2008

Koneksi Sang Gajah dengan Sang Kopi pada Pinguin




Dari judulnya koneksi Sang Gadjah dengan Sang Kopi apa yang akan terlintas dalam pikiran kita, gimana ya caranya ??? trus ngapain juga ngurusin gajah sama kopi ??? kok ada pinguin juga sih???. Kalo kita bisa melakukannya akan sangat menyenangkan dan akan memberikan hasil yang sangat powerfull... tau sendiri kan tenaga gajah yang kuat didukung bentuknya yang gede ditambah dengan nikmatnya rasa kopi yang nikmat pluss-pluss kemampuan pinguin dalam bermigrasi pada jarak yang sangat jauh. Jadinya pinguin gendong gajah yang kuat dan ngga ngantuk-an hehe... so powerfull..

Oke langsung saja yah disini kita mau mengkoneksikan PosgreSQL dengan Java. Truss hubungannnya apa sama gajah, kopi ma pinguin ??? ya secara gituloh logonya Postgre kan gajah trademarknya Java kan make logo Secangkir kopi dan tau sendiri logonya sang jawara kita Linux kan pinguin... jadinya ya ngga pa kan klo dianalogikan sabagai gajah, kopi dan pinguin...

Yuuk lanjut...

JDBC Driver untuk postgreSQL dapat didownload dari http://jdbc.postgresql.org/.
Jangan lupa download drivernya dan sesuaikan dengan versi JDK yang digunakan, atau bisa dibuild sendiri menggunakan ant, untuk mem-build dibutuhkan ant versi 1.5 atau versi yang lebih tinggi. Ant sendiri merupakan tool untuk building Java-based package, ant tool dapat diperoleh melalui http://ant.apache.org/index.html.

Installasi Ant
Setelah didownload tinggal diekstrak tanpa ada kompilasi ulang karena merupakan program java tinggal dijalankan saja. Lalu bagaimana cara menggunakannya ???, Ant didesain agar mudah digunakan. Direktori /bin berisi file executable bernama ant yang digunakan untuk menjalankan ant. Kita dapat menjalankan ant dengan cara memanggilnya dengan cara ./ant atau $ANT_HOME/bin/ant atau /ant_direktori/bin/ant. Secara default ant akan menggunakan dimana ant berada dan akan mencoba untuk mencari file build.xml. Berikut ini adalah contoh untuk file build.xml yang bisa digunakan untuk build driver :




Jika driver dibuild dari source akan menghasilkan file dengan format postgresql-[server version].[buildnumber].jdbc[JDBC version].jar, sebagai contoh postgresql-8.0-310.jdbc3.jar. Jangan lupa untuk menambahkannya kedalam classpath. Sebagai berikut :

pada unix/linux => export CLASSPATH=/direktori_tempat_driver/nama_driver.jar


Karena Java tidak mensupport menggunakan unix socket jadi PostgreSQL harus dikonfigurasi terlebih dahulu agar bisa menerima koneksi dari TCP/IP. Untuk Postgre versi 8.0 mengijinkan koneksi dari localhost. Agar koneksi dari luar localhost diijinkan maka perlu memodifikasi file postgresql.conf pada bagian listen_addresses setting.

untuk server versi 8.0 jangan lupa untuk set tcpip_socket = true di file postgresql.conf, dalam pembuatan artikel ini ane menggunakan versi 8.3 tanpa modifikasi pada file postgresql.conf sedikitpun dan secara default TCP/IP dan listen_address setting sudah default mendengarkan localhost.

Note : Proses instalasi PostgreSQL bisa dilihat di http://postgresql.org, ada dua jenis instalasi bisa dari source maupun binari. Keduanya sama2 enak kok... easy to learn lah pokoknya.


Lanjut lagi yuuk..

Asumsi Postgre sudah terinstall dan bisa berjalan dengan baik. Buat user baru dengan nama "learn" dan passwordnya "learn", Pada instalasi Postgre secara default akan mempunyai user postgres sebagai superuser, melalui user ini kita bisa membuat user baru dan database baru.

Masuk menggunakan user postgres, sbb :

amru@blackcube:/opt/PostgreSQL/8.3/bin$ ./psql -U postgres -W
Password for user postgres:
Welcome to psql 8.3.4, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit

postgres=#


Buat user baru "learn" menggunakan pasword "learn" :

postgres=# CREATE USER learn WITH PASSWORD 'learn';
CREATE ROLE
postgres=#


Buat database baru "learn" sebagai percobaan :

postgres=# CREATE DATABASE learn;
CREATE DATABASE
postgres=#


Keluar dari user postgres dan login sebagai user learn untuk memastikan bahwa user bisa login dan menggunakan database learn :

postgres=# \q
amru@blackcube:/opt/PostgreSQL/8.3/bin$
amru@blackcube:/opt/PostgreSQL/8.3/bin$ ./psql -U learn -d learn -W
Password for user learn:
Welcome to psql 8.3.4, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit

learn=>


Oke setelah user bisa login dan bisa menggunakan database learn, selanjutnya kita coba untuk langsung mencoba menggunakan JDBC. Yuuuk!!!

Importing JDBC
Setiap source yang menggunakan JDBC harus melakukan import pada paket java.sql, sbb:

import java.sql.*;


Loading The Driver

Sebelum melakukan koneksi ke database, kita harus load driver terlebih dahulu. Ada dua cara untuk load driver, terserah mau pake yang mana tergantung selera dalam coding antum2 sekalian.
Metode yang pertama, secara implisit kita load driver menggunakan method Class.forName(). untuk PostgreSQL :

Class.forName("org.postgresql.Driver");


Metod diatas akan melakukan load pada driver, dan ketika loading, driver secara otomatis akan melakukan register dengan JDBC. Metod forName() akan menghasilkan ClassNotFoundException jika driver tidak diketemukan.
Metode loading yang kedua dengan cara melewatkan driver sebagai parameter ke JVM pada waktu akan menjalankan program, dengan menggunakan -D argument. Contoh :

java -Djdbc.drivers=org.postgresql.Driver contoh.ProgramJDBC


dengan metode melewatkan parameter diatas kita bisa mengubah driver tanpa harus melakukan komilasi ulang tinggal mengubah nama driver yang dilewatkan pada saat runtime.

Ketika kita mencoba untuk melakukan koneksi dan tiba2 terjadi kesalahan misalnya, driver tidak diketemukan SQLException akan muncul, ini dimungkinkan karena driver tidak berada pada classpath, atau nilai yang dilewatkan pada parameter tidak tepat.

Connecting to the Database

Dengan menggunakan JDBC, database direpresentasikan dengan menggunakan URL(Uniform Resource Locator). Untuk PostgreSQL URL akan didapatkan sbb :

-jdbc:postgresql:database
-jdbc:postgresql://host/database
-jdbc:postgresql://host:port/database


Oke setelah itu kita masuk ke koding ya!!!
Pada contoh dibawah ini kita akan melakukan koneksi ke database kemudian akan membuat temporary table geomtest, selanjutnya akan melakukan insert kedalam table tersebut.. dan kita tampilkan isi dari table tersebut.

//Import JDBC
import java.sql.*;

//Import tipe data PGpoint dan PGcircle, akan kita
import org.postgresql.geometric.PGpoint;
import org.postgresql.geometric.PGcircle;

public class GeometricTest {

public static void main(String args[]) throws Exception {
//load driver
Class.forName("org.postgresql.Driver");
//learn pada url merupakan nama database
String url = "jdbc:postgresql://localhost:5432/learn";
//melakukan koneksi ke databse menggunakan Class Connection, dengan parameter sbb :
//url merupakan url database
//learn yang pertama merupakan username
//learn yang kedua merupakan password
Connection conn = DriverManager.getConnection(url, "learn", "learn");

//Class statement digunakan untuk memasukkan tag DML, DDL
Statement stmt = conn.createStatement();
stmt.execute("CREATE TEMP TABLE geomtest(mycirc circle)");
stmt.close();

insertCircle(conn);
retrieveCircle(conn);
conn.close();
}

//metod digunakan untuk melakukan insert kedalam table
private static void insertCircle(Connection conn) throws SQLException {

PGpoint center = new PGpoint(1, 2.5);
double radius = 4;
PGcircle circle = new PGcircle(center, radius);

//PreparedStatement digunakan untuk melakukan perubahan pada statemen sebelumnya
//atau kita bisa membuat statement baru dengan menggunakan conn.createStatement()
PreparedStatement ps = conn
.prepareStatement("INSERT INTO geomtest(mycirc) VALUES (?)");
ps.setObject(1, circle);
ps.executeUpdate();
ps.close();
}

private static void retrieveCircle(Connection conn) throws SQLException {
Statement stmt = conn.createStatement();
ResultSet rs = stmt
.executeQuery("SELECT mycirc, area(mycirc) FROM geomtest");
rs.next();
PGcircle circle = (PGcircle) rs.getObject(1);
double area = rs.getDouble(2);

PGpoint center = circle.center;
double radius = circle.radius;

System.out.println("Center (X, Y) = (" + center.x + ", " + center.y
+ ")");
System.out.println("Radius = " + radius);
System.out.println("Area = " + area);
}
}


Kemudian compile program dengan cara :

amru@blackcube:~/MyJava$ javac -classpath /media/sda7/Java/JDBC/postgresql-8.3-604.jdbc4.jar GeometricTest.java
amru@blackcube:~/MyJava$


Jalankan program dengan cara :

amru@blackcube:~/MyJava$ java GeometricTest
Center (X, Y) = (1.0, 2.5)
Radius = 4.0
Area = 50.26548245743669


Kelar dah...

Untuk download resource dan dokumentasi kunjungin aja situsnya..
Referensi :
http://jdbc.postgresql.org/
http://ant.apache.org/index.html

5 comments:

  1. @Taruma
    hahah.. sebenernya aku juga ngga ngerti apa yang ku tulis... :)

    ReplyDelete
  2. oalah .. baru tau aku kalo lambang postgresql tu gajah .. :D
    kalo kopi kan udah jelas java, dan pinguin udah jelas linux :D

    ReplyDelete
  3. @bede
    hehe ya begitulah bud, katanya pada mau backpacker ke bali, yaudah deh selamat menikmati aja..
    @komuter
    ya begitulah adanya... :D
    thanks dah mampir

    ReplyDelete