download

Web Programming Ver 2.0 2006
Teknik Akses Data JDBC
Agar dapat menggunakan pernyataan sql di program java, kita harus menyertakan paket java.sql.
Setelah sebuah database dan tabel dibuat, komponen J2EE dapat mengirimkan perintah ke DBMS untuk
menyimpan, mengambil, update, manipulasi dan menghapus data.
Langkah –langkah untuk menggunakan JDBC sebagai berikut :
1. Masukkan paket java.sql
2. Register driver yang sesuai
3. Koneksi ke databse
4. Buat pernyataan/statement
5. Eksekusi statement
6. Ambil hasil/result
7. Tutup statement dan koneksi
Microsoft merupakan perusahaan pertama yang membuat suatu cara agar pengaksesan berbagai
data menjadi sangat mudah menggunakan Open Database Connection (ODBC). JDBC API berisi 2 paket
yaitu java.sql yang merupakan bagian dari J2SE dan javax.sql yang merupakan perluasan dari java.sql
untuk aplikasi J2EE untuk dapat berinteraksi dengan Java Naming and Directory Interface (JNDI).
Koneksi di SQL Server 2005
Untuk menggunakan database yang sudah ada di dalam CD, Anda attach file database melalui
menu Attach Database di Enterprise Manager SQL Server 2005. Pastikan nama database yang anda buat
ialah java.
Menempelkan file database Java_Data.MDF
Widodo Budiharto D2637
Web Programming Ver 2.0 2006
java_Data.MDF ditempelkan ke Server Server 2005
Untuk membuat koneksi ke Microsoft SQL Server 2005 di java umumnya kita menggunakan
ODBC. Anda dapat membuat ODBC melalui DataSources ODBC di dalam Administrative tools sebagai
berikut :
ODBC Data Source
Anda dapat memilih database yang anda inginkan seperti yang tersedia di gambar atas. Sebagai
contoh jika ingin membuat koeksi ke sql server, anda pilih Data Source tersebut lalu beri nama serta
Widodo Budiharto D2637
Web Programming Ver 2.0 2006
tentukan nama servernya. Jika anda ingin koeksi ke Ms Access, pilih driver Microsoft Access Driver
(*.mdb) lalu beri nama data source serta nama file .mdb . Perlu diperhatikan untuk letak file .mdb
disarankan jangan masuk terlalu banyak ke dalam direktori karena sering error, jadi kalau bisa di root
direktori.
Membuat data source Sql Server
Memberi nama DSN dan seting database
Berbagai objek untuk Query Data
Setelah koneksi ke database dibuka, komponen J2EE dibuat dan mengirm sebuah query untuk
mengakses data di dalam database. Objek-objek untuk query ada 3 yaitu Statement yang melakukan query
dengan cepat, PreparedStatement yang digunakan untuk mengeksekusi query yang dikompilasi ( yang
membutuhkan input menggunakan tanda ?) dan CallableStatement untuk mengeksekusi stored procedure.
Objek Statement
Objek Statement digunakan ketika komponen J2EE harus mengeksekusi dengan cepat sebuah query tanpa
harus menggunakan query yang harus dikompilasi / stored procedure
Contoh :
String url=”jdbc:odbc:Kopi”;
Widodo Budiharto D2637
Web Programming Ver 2.0 2006
String userID=”sa”;
String password=””;
Statement DataRequest;
ResultSet Results;
Connection Db;
try {
String query=”select * from customers”;
DataRequest =Db.createStatement();
Results=DataRequest.executeQuery(query);
DataRequest.close();
}
Jika anda ingin melakukan joining tabel, gunakan contoh berikut :
String query = "select SUPPLIERS.SUP_NAME, COFFEES.COF_NAME " +
"from COFFEES, SUPPLIERS " +
"where SUPPLIERS.SUP_NAME like 'Acme, Inc.' and " +
"SUPPLIERS.SUP_ID = COFFEES.SUP_ID";
Statement stmt;
try {
Class.forName("myDriver.ClassName");
} catch(java.lang.ClassNotFoundException e) {
System.err.print("ClassNotFoundException: ");
System.err.println(e.getMessage());
}
try {
con = DriverManager.getConnection (url, "sa", "");
stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(query);
System.out.println("Supplier, Coffee:");
while (rs.next()) {
String supName = rs.getString(1);
String cofName = rs.getString(2);
System.out.println(" " + supName + ", " + cofName);
}
Perlu diingat bahwa method executeUpdate() digunakan hanya untuk aksi insert, update, delete dan Data
Definition Language.
Objek PreparedStatement
Sebuah query SQL dapat diprecompilasi dan dieksekusi menggunakan objek PreparedStatement.
Tanda Tanya (?) dapat digunakan sebagai tempat untuk memasukkan nilai.
Contoh :
try {
String query=”Select * from Customers where CustNumber=?”;
PreparedStatement pstatement=Db.preparedStatement(query);
pstatement.setString(1,”123”);
Results=pstatement.executeQuery();
pstatement.close();
Objek CallableStatement
Objek CallabelStatement digunakan untuk memanggil stored prosedure dari objek J2EE. Stored
procedure ialah sekumpulan sintaks sql yang mempunyai 1 buah nama dan dapat dipanggil.
Widodo Budiharto D2637
Web Programming Ver 2.0 2006
Contoh :
String ordernumber;
try {
String query=”{CALL StoredProcSaya (?)}”;
CallableStatement cstatement =Db.prepareCall(query);
sstatement.registerOutParameter(1,Types.VARCHAR();
sstatement.execute();
ordernumber=cstatement.getString(1);
cstatement.close();
ResultSet Scrollable
Objek ResultSet berisi method untuk mengkopi data dari ResultSet ke objek koleksi java atau
variable untuk pemrosesan lebih lanjut. ResultSet menggunakan cursor virtual untuk menunjuk sebuah
baris dari table virtual. Setlah cursor virtual menunjuk ke sebuah baris, method getxxx() digunakan untuk
mengkpi data dari baris ke sebuah koleksi, objek atau variable. Method next() digunakan untuk
memindahkan pointer virtual ke baris pertama pada ResultSet. Jika ada data pada baris tersebut, next()
akan mengembalikan nilai true. Nilai true tersebut akan menyebabkan program masuk ke do…while pada
blok try dimana method getString dipanggil untuk mengakses data pada kolom bertipe string.
Contoh :
do {
FirstName=Results.getString(1);
LastName=Results.getString(2);
Printrow=FistName + “” + LastName;
System.out.println (printrow);
}
while (Results.next());
DataRequest.close();
Ada 6 method dari objek ResultSet yang digunakan untuk memposisikan cursor vitutal yaitu first(), last(),
previous(), absolute(), relative() dan getRow(). Objek Statement yang dibuat menggunakan
createStatement() dari Objek Connection harus disetup untuk menangani scrollable ResultSet dengan
mempassing method createStatement() menggunakan salah satu dari 3 konstanta yaitu
TYPE_FORWARD_ONLY( baca data arah maju saja), TYPE_SCROLL_INSENSITIVE (tidak sensitif
terhadap perubahan data) dan TYPE_SCROLL_SENSITIVE.
Contoh :
try{
String query =”select FirstName, LastName from Customers”
DataRequest =Db.createStatement(TYPE_SCROLL_INSENSITIVE);
Results =DataRequest.executeQuery (query);
}
Update dan Delete ResultSet
Setelah method executeQuery() dipanggil, method updatexxx() dapat digunakan untuk mengubah nilai dari
suatu kolom data.
Contoh :
try {
String query=”select * from customers where FirstName=’Ratna’ and
LastName=’Budiharto’”;
DataRequest =Db.createStatement (ResultSet.CONCUR_UPDATABLE);
Results =DataRequest.executeQuery (query);
….
Widodo Budiharto D2637
Web Programming Ver 2.0 2006
try {
Results.updateString (“LastName”,”Budiharto”);
Results.updateRow();
//menghapus 1 row saat ini
Results.deleteRow(0);
DataRequest.close();
Contoh Aplikasi JDBC
Contoh berikut ialah membuat tabel, memasukkan data ke tabel, menampilkan dan mengupdate
data di tabel tersebut dan memanggil data menggunakan stored procedure. Tabel yang dibuat bernama
coffees dengan nama ODBC Kopi. Anda terlebih dahulu harus membuat sebuah projek dengan nama
AplikasiJava.
package aplikasijava;
import java.sql.*;//paket untuk sql
public class CreateCoffees
{
public static void main(String args[])
{
//nama odbc ialah Kopi
String url = "jdbc:odbc:Kopi";
Connection con; //Buat objek Conection
String createString;
//membuat tabel coffees
createString = "create table coffees " +
"(COF_NAME VARCHAR(32), " +"SUP_ID INTEGER, " +
"PRICE FLOAT, " +"SALES INTEGER, " + "TOTAL INTEGER)";
Statement stmt;
try
{
//meload driver jdbc
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(java.lang.ClassNotFoundException e)
{
System.err.print("ClassNotFoundException: ");
System.err.println(e.getMessage());
}
try
{
//membuat koneksi dengan username sa dan password kosong (karena default sql)
con = DriverManager.getConnection(url, "sa", "password_anda");
stmt = con.createStatement();
stmt.executeUpdate(createString); //eksekusi string tersebut
stmt.executeUpdate("insert into coffees " + " values ('colombian',101,7.99,0,0)");//masukkan data
stmt.executeUpdate("insert into coffees " + " values ('java',102,8.99,0,0)");
//menampilkan data cof_name dan price
//menggunakan executeQuery karena menjalankan select statement, bukan update/delete
ResultSet rs=stmt.executeQuery ("Select cof_name, price from coffees"); //eksekusi query
System.out.println ("@@@@ Menampilkan data pertama kali @@@@");//Menampilkan data
while (rs.next())
{
String s=rs.getString ("Cof_name");//Pastikan tipe data sesuai
float n =rs.getFloat ("price");
Widodo Budiharto D2637
Web Programming Ver 2.0 2006
System.out.println (s + " " + n);
}
//mengupdate tabel coffess dengan syarat cof_name nya ialah 'colombian'
String updateString ="Update coffees" + " set sales=75 " + "where cof_name like 'colombian'";
//menggunakan executeUpdate karena mengupdate data
stmt.executeUpdate (updateString);
//menampilkan data yang telah diupdate
ResultSet rs2=stmt.executeQuery ("Select cof_name, sales, price from coffees");
System.out.println ("@@@ Menampilkan data yang telah diupdate @@@");
while (rs2.next())
{
String s2=rs2.getString ("Cof_name");
int b2=rs2.getInt ("sales");
float n2 =rs2.getFloat ("price");
System.out.println (s2 + " " + b2 + " " + n2);
}
//menampilkan yang telah diupdate untuk cof_name yang 'colombian’;
String query1 = " select cof_name, sales from coffees" + " where cof_name like 'colombian'";
ResultSet rs1 =stmt.executeQuery (query1);
System.out.println ("@@@@@Menampilkan data yang telah diupdate untuk colombian@@@@@");
while (rs1.next())
{
String s1 =rs1.getString ("cof_name");
int n1 =rs1.getInt ("sales");
System.out.println (n1 + " pounds of " + s1 + " sold this week");
}
//Update menggunakan commit
PreparedStatement updateTotal = con.prepareStatement (
"update coffees set TOTAL = TOTAL + ? where cof_name like ?");
updateTotal.setInt (1,50);
updateTotal.setString (2,"colombian");
updateTotal.executeUpdate();
con.commit();
//con.setAutoCommit(true);
//menampilkan yang telah diupdate menggunakan commit
String query5 = " select cof_name, total from coffees" + " where cof_name like 'colombian'";
ResultSet rs7 =stmt.executeQuery (query5);
System.out.println ("@@@Menampilkan data yang telah diupdate untuk colombian menggunakan
commit@@@");
while (rs7.next())
{
String s7 =rs7.getString ("cof_name");
int n7 =rs7.getInt ("total");
System.out.println (n7 + " total " + s7 + " sold this week");
}
//Stored procedure
System.out.println ("@@@@ Berikut contoh penggunaan dan pemanggilan Stored Procedure @@@@");
//Buat stored procedure
String c = "create procedure SHOWS " + "as select sup_id, cof_name from coffees ";
Statement stmt3=con.createStatement();
stmt.executeUpdate(c);
//Panggil stored procedure menggunakan call
CallableStatement cs = con.prepareCall ("{ call SHOWS }");
ResultSet rs4 =cs.executeQuery();
while (rs4.next())
{
Widodo Budiharto D2637
Web Programming Ver 2.0 2006
int s4=rs4.getInt("sup_id");
String s5=rs4.getString ("cof_name");
System.out.println(s4 + " mensuplai kopi " + s5);
}
stmt.close();
con.close();
}
catch(SQLException ex)
{
System.err.println("SQLException: " + ex.getMessage());
}}}
Program di atas dapat dijelaskan sebagai berikut :

import java.sql.*
Java membutuhkan paket tersebut untuk mengenal sintaks –sintaks sql seperti select statement dan
segala sesuatu yang berhubungan dengan database.

String createString;
//membuat tabel coffees
createString = "create table coffees " +
"(COF_NAME VARCHAR(32), " +"SUP_ID INTEGER, " +
"PRICE FLOAT, " +"SALES INTEGER, " + "TOTAL INTEGER)";
Program diatas akan membuat sebuah table coffess dimana string /informasi perintah pembuatan tabel
tersebut disimpan di dalam sebuah variable bernama createString.

try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(java.lang.ClassNotFoundException e)
{
System.err.print("ClassNotFoundException: ");
System.err.println(e.getMessage());
}
Program di atas akan mecoba mencocokkan nama kelas untuk driver jdbc pada java, yang berada di
dalam blok try..catch untuk antisipasi jika ada error, dibuang ke bagian catch yang akan menampilkan
pesan error menggunakan kelas ClassNotFoundException .

String url = "jdbc:odbc:Kopi";
con = DriverManager.getConnection(url, "sa", "password_anda");
stmt = con.createStatement();
Nama dari ODBC di atas ialah Kopi, lalu objek koneksi con akan diset koneksinya dimana
alamatnya ialah url, dengan username sa tanpa password. Lalu objek stmt akan menampung hasil
pembuatan statement dari objek con.

stmt.executeUpdate(createString); //eksekusi string tersebut
stmt.executeUpdate("insert into coffees " + " values ('colombian',101,7.99,0,0
stmt.executeUpdate("insert into coffees " + " values ('java',102,8.99,0,0)");
//menampilkan data cof_name dan price
Widodo Budiharto D2637
Web Programming Ver 2.0 2006
//menggunakan executeQuery karena menjalankan select statement, bukan update/delete
ResultSet rs=stmt.executeQuery ("Select cof_name, price from coffees"); //eksekusi query
System.out.println ("@@@@ Menampilkan data pertama kali @@@@");
while (rs.next())
{
String s=rs.getString ("Cof_name");//Pastikan tipe data sesuai
float n =rs.getFloat ("price");
System.out.println (s + " " + n);
}
Widodo Budiharto D2637