program studi teknik komputer pens-its

advertisement
Java Database Connectivity
(JDBC-1)
Sumber
: Core WebProgramming
Pengarang : Marty Hall – Larry Brown
Slide
: Riyanto Sigit
JDBC
• JDBC adalah Application Programming
Interface (API) yang dirancang untuk
mengakses database universal berdasarkan
SQL.
• JDBC terdiri atas JDBC 1.0 API yang
memberika fungsi-fungsi dasar untuk akses
data. JDBC 2.0 API memberikan tambahan
ke fungsi-fungsi dasar dengan kelebihankelebihan lain yang lebih mutakhir.
JDBC API
•
•
•
JDBC adalah suatu nama trade mark, bukan sebuah singkatan. Tapi
JDBC sering dikira singkatan dari Java Database Connectivity. JDBC
API terdiri dari sejumlah class dan interface yang ditulis dalam bahasa
Java yang menyediakan API standar sebagai alat bantu bagi pembuat
program dan memberikan kemungkinan untuk menulis aplikasi
database dengan menggunakan semua Java API.
JDBC API memudahkan untuk mengirim statement SQL ke sistem
database relasional dan mendukung bermacam-macam bahasa SQL.
Keunggulan JDBC API adalah sebuah aplikasi dapat mengakses
sembarang sumber data dan dapat berjalan pada sembarang platform
yang mempunyai Java Virtual Machine(JVM)
Sehingga kita tidak perlu menulis satu program untuk mengakses
database Sybase, Oracle atau Access dan lain-lain. Kita cukup menulis
satu program yang menggunakan JDBC API, dan program dapat
mengirimkan statement SQL atau statement lain ke sumber data
tertentu. Dengan aplikasi yang ditulis dalam bahasa Java seseorang
tidak perlu khawatir untuk menulis aplikasi yang berbeda-beda agar
dapat berjalan pada platform yang berbeda-beda.
Apa yang dilakukan JDBC?
• Membangun sebuah koneksi ke
sumber data (data source).
• Mengirim statement ke sumber
data.
• Memproses hasil dari statement
tersebut
Model 2-tier dan 3-tier
•
•
•
Untuk akses database, JDBC API mendukung baik model 2-tier maupun 3tier.
Untuk model 2-tier, sebuah applet atau aplikasi java berbicara langsung ke
database. Dalam hal ini diperlukan JDBC driver yang dapat berkomunikasi
ke sumber data tersebut. Sebuah perintah atau statement dari user dikirim
ke database dan hasil dari statement dikirim balik ke user. Database dapat
terletak pada mesin yang sama atau berbeda dengan klien, yang
disambungkan dengan jaringan. Jika letak database berbeda dengan mesin
klien maka disebut dengan client/server. Mesin user disebut dengan client
dan mesin dimana database berada disebut dengan server. Jaringan ini
bisa berupa LAN atau internet.
Dalam model 3-tier, user mengirimkan perintah ke sebuah middle tier.
Selanjutnya middle tier mengirimkan perintah tersebut ke database.
Database memproses perintah tersebut dan mengirim balik hasilnya ke
middle tier. Kemudian middle tier mengirimkannya ke user. Keuntungan
model 3-tier ini adalah mempermudah aplikasi untuk dideploy dan
meningkatkan performansi.
Tipe-tipe Driver JDBC
•
•
•
•
JDBC-ODBC Bridge plus ODBC Driver Kombinasi ini menghasilkan
akses JDBC melalui driver ODBC. Menjembatani antara aplikasi Java
dengan Microsoft ODBC. Tipe driver ini paling cocok untuk jaringan
korporat dimana instalasi klien bukan masalah besar, atau untuk aplikasi
server yang ditulis dalam bahasa Java dalam arsitertur 3-tier.
Native API party Java technology-enabled driver Tipe driver ini
mengkonversi JDBC call ke dalam client API untyk Oracle, Sybase,
Informix, DB2, dan DBMS yang lain. Tipe ini memerlukan kode binary
yang spesifik terhadap sistem operasi yang di-load kedalam masingmasing klien.
Pure Java Driver for Database Middleware (JDBC-Net). Model driver ini
menerjemahkan JDBC call kedalam protokol middleware vendor, yang
kemudian diterjemahkan ke protokol DBMS oleh server middleware.
Middleware menyediakan konektifitas ke berbagai jenis database yang
berbeda.
Native-protocol Pure Java Driver Model driver ini mengkonversi JDBC
call langsung kedalam protokol network yang digunakan oleh DBMS,
mengijinkan direct call dari mesin klien ke server DBMS dan memberikan
solusi praktis untuk akses internet.
Tipe data JDBC
Langkah-langkah
menggunakan JDBC
•
•
•
•
•
•
•
Load driver
Mendefinisikan koneksi URL
Membuat koneksi
Membuat obyek statement
Mengeksekusi query
Memproses result
Menutup koneksi
Load driver
•
Untuk mengaktifkan hubungan antar aplikasi dan database, maka
sebuah Connection harus debentuk dengan menggunakan JDBC
Driver. Connection dibentuk melalui satu class java.sql.DriverManager
dan dua interface, yaitu java.sql.Driver dan java.sql.Connection. Class
untuk JDBC diakses melalui java.sql.*. Driver adalah software yang
menangani komunikasi ke database server. Berikut ini adalah contoh
program jika yang kita gunakan adalah JDBC-ODBC driver.
try {
Class.forName(“sun.jdbc.odbc.JdbcDriver”);
}
catch (ClassNotFoundException ex) {
System.err.println(“Driver Error”);
ex.printStackTrace();
System.exit(1);
}
Load driver
• Penggunaan Class akan throw
ClassNotFoundException. Dokumentasi driver anda
akan memberikan nama class yang digunakan.
Contoh :
• Oracle :
Class.forName(“oracle.jdbc.OracleDriver”);
• Sybase:
Class.forName(“com.sybase.jdbc.SybDriver”);
Mendefinisikan koneksi URL
• Menspesifikasikan lokasi database server. Untuk mendefinisikan
URL kita bisa menggunakan dokumentasi driver. Untuk penggunaan
JDBC di applet maka database server harus berada pada node
yang sama dengan letak applet dan menggunakan proxy server
yang me “reroute” request database ke actual server. Berikut ini
contoh mendefinisikan url:
Membuat koneksi
• Membuat koneksi bisa dilakukan dengan cara memanggil
method getConnection() dari DriverManager dengan
melewatkan URL sebagai argumen. Method
getConnection() akan melempar SQLException.
• Contoh:
Membuat koneksi
•
Akses ke Driver dan DriverMAnager dapat menyebabkan Exception
yang harus dikendalikan oleh program. Misal:
try{
……
}
catch(ClassNotFoundException ex) {
System.err.println("Driver Error");
ex.printStackTrace();
System.exit(1);
}
catch(SQLException ex) {
System.err.println("Tidak Berhasil Koneksi dengan Northwind");
System.exit(1);
}
Membuat obyek statement
• Obyek Statement digunakan untuk mengirim
query dan perintah ke database. Obyek
statement dibuat dengan cara bekerjasama
dengan class Connection. Untuk membuat
obyek Statement maka kita harus memangil
method createStatement() dari Connection.
• Contoh:
Statement statement = connection.createStatement();
Mengeksekusi query
• Untuk mengeksekusi query kita bisa memanfaatkan
objek Statement untuk memproses hasil query.
Caranya adalah dengan memanggil method
executeQuery() dari objek Statement. Method
executeQuery() akan mengembalikan nilai yang
bertipe ResulSet.
• Contoh:
String sql=“select col1, col2, col3 from sometable”;
ResultSet rs=statement.executeQuery(sql);
• Untuk memodifikasi database, gunakan
statement.executeUpdate(sql); yang mendukung
string sql UPDATE, INSERT INTO, DELETE
Memproses result
•
•
Untuk memproses result kita bisa menggunakan method next() pada
objek ResultSet untuk mendapatkan result per satu baris. Selama
data masih ada method next() akan mengembalikan nilai true dan
jika sudah tidak ada akan mengembalikan nilai false.
Contoh:
String nrp;
String nama;
while (rs.next()){
nrp=rs.getString(1);
nama=rs.getString(2);
System.out.println("NRP : " +nrp);
System.out.println("NAMA : " +nama);
System.out.println("-------------");
}
Memproses result
• Kolom pertama mempunyai index 1 bukan 0. Objek
ResultSet otomatis akan ditutup bila ada objek
ResultSet baru. ResultSet memberikan bermacammacam method getXxx() dengan parameter indek
kolom atau nama kolom dan mengembalikan data.
Beberapa method yang ada pada ResultSet adalah
sebagai berikut:
– findColumn() untuk mendapatkan index (integer value)
berdasarkan nama kolom.
– getMetaData() untuk meretrieve informasi mengenai
ResultSet, returns object ResultSetMetaData.
– wasNull() untuk mengetahui apakah getXxx()
menghasilkan SQL null.
Menutup koneksi
• Karena membuka koneksi adalah
mahal, maka penundaan langkah
terakhir ini hanya jika masih ada
operasi database yang dilakukan.
• Deklarasi untuk menutup koneksi
harus didefinisikan secara eksplisit
dengan cara sebagai berikut:
connection.close();
Membuat Data Source
• Berikut ini adalah langkah-langkah untuk mengakses tabel yang
tersimpan pada database Acces dengan menggunakan ODBC
• Click Start, Settings, Control Panel, Administrative Tools,
Data Sources(ODBC), System DSN, dan pilih Add
• Memilih driver Microsoft Access, Finish, ketikkan nama Data Source
Name dan tekan Select untuk memilih nama dan lokasi database
• Navigasi pada directory msoffice, pilih Northwind.mdb,
tekan OK dan lanjutkan tekan OK pada window
Program
• Gunakan sun.jdbc.JdbcOdbcDriver sebagai
nama class dari JDBC driver
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
• Gunakan “jdbc:odbc:Northwind” sebagai
alamat database, dan gunakan empty string
pada username dan password
Connection
con=DriverManager.getConnection(jdbc:odbc:Northwind,””,””);
Percobaan 1
• Program yang mengakses dan menampilkan
semua data pada kolom kedua dan ketiga
pada tabel Employees pada database
Northwind.mdb. Pada program ini database
tidak berubah, karena hanya melakukan
select query.
• Buatlah juga data source untuk database
Northwind.mdb
import java.sql.*;
public class NorthWind {
private Connection con;
NorthWind(){
con=null;
}
public ResultSet dbOpen() {
String dbname="jdbc:odbc:Northwind";
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con=DriverManager.getConnection(dbname,"","");
if (con==null)
System.err.println("Koneksi ke Database gagal");
else
System.err.println("Koneksi ke Database Berhasil");
}catch(ClassNotFoundException ex) {
System.err.println("Driver Error");
ex.printStackTrace();
System.exit(1);
}catch(SQLException ex) {
System.err.println("Tidak Berhasil Koneksi dengan Northwind");
System.exit(1);
}
ResultSet rs=null;
Statement st;
try {
System.out.println("Employees\n" + "===========");
st=con.createStatement();
rs=st.executeQuery("SELECT * FROM employees");
}catch(SQLException ex){
ex.printStackTrace();
}
return(rs);
}
public void showEmployee (ResultSet rs) throws SQLException {
ResultSetMetaData rsData = rs.getMetaData();
String kolom3 = rsData.getColumnName(3);
String kolom2 = rsData.getColumnName(2);
while (rs.next()){
System.out.print(rs.getString(kolom3)+" ");
System.out.println(rs.getString(kolom2)+" ");
}
}
public void dbClose(){
try {
con.close();
}
catch(SQLException sqlex){
System.err.println("Error :Koneksi Database tidak Bisa diputus");
}
}
public static void main(String argv[]) throws Exception {
NorthWind app=new NorthWind();
ResultSet rs;
rs=app.dbOpen();
app.showEmployee(rs);
app.dbClose();
}
}
Percobaan 2
• Program yang melakukan insert yang
berarti melakukan update data dan
menampilkan data pada database.
Pada contoh ini digunakan method
executeUpdate() untuk mengupdate
database.
import java.sql.*;
public class Insert {
private Connection con;
Insert(){
con=null;
}
public void dbOpen() {
String dbname="jdbc:odbc:Northwind";
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con=DriverManager.getConnection(dbname,"","");
if (con==null)
System.err.println("Koneksi ke Database gagal");
else
System.err.println("Koneksi ke Database Berhasil");
}catch(ClassNotFoundException ex) {
System.err.println("Driver Error");
ex.printStackTrace();
System.exit(1);
}catch(SQLException ex) {
System.err.println("Tidak Berhasil Koneksi dengan Northwind");
System.exit(1);
}
}
public ResultSet select(){
ResultSet rs = null;
Statement st;
try{
st = con.createStatement();
String sql1 = "SELECT * FROM SHIPPERS";
rs = st.executeQuery(sql1);
}catch(SQLException ex) {
System.err.println("Tidak Berhasil update Northwind");
System.exit(1);
}
return(rs);
}
public void insert(){
try{
Statement st = con.createStatement();
String sql2 = "INSERT INTO SHIPPERS (ShipperID, CompanyName, Phone) VALUES (4,'Federal
Express','(031) 555-1111')";
st.executeUpdate(sql2);
}catch(SQLException ex) {
System.err.println("Tidak Berhasil update Northwind");
System.exit(1);
}
}
public void showShippers(ResultSet rs){
try{
ResultSetMetaData rsData = rs.getMetaData();
String kolom1 = rsData.getColumnName(1);
String kolom2 = rsData.getColumnName(2);
String kolom3 = rsData.getColumnName(3);
while (rs.next()){
System.out.print(rs.getString(kolom1)+" ");
System.out.print(rs.getString(kolom2)+" ");
System.out.println(rs.getString(kolom3)+" ");
}
}catch(SQLException ex) {
System.err.println("Tidak Berhasil retrieve Northwind");
System.exit(1);
}
}
public void dbClose(){
try {
con.close();
}catch(SQLException sqlex){
System.err.println("Error :Koneksi Database tidak Bisa diputus");
}
}
public static void main(String argv[]) throws Exception {
Insert app = new Insert();
ResultSet rs;
app.dbOpen();
rs = app.select();
System.out.println("Data Shippers sebelum insert");
app.showShippers(rs);
app.insert();
rs = app.select();
System.out.println("Data Shippers sesudah insert");
app.showShippers(rs);
app.dbClose();
}
}
Percobaan 3
• Melakukan update data suatu record
pada suatu tabel, dengan
menggunakan query SET.
import java.sql.*;
public class Set {
private Connection con;
Set(){
con=null;
}
public void dbOpen() {
String dbname="jdbc:odbc:Northwind";
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con=DriverManager.getConnection(dbname,"","");
if (con==null)
System.err.println("Koneksi ke Database gagal");
else
System.err.println("Koneksi ke Database Berhasil");
}catch(ClassNotFoundException ex) {
System.err.println("Driver Error");
ex.printStackTrace();
System.exit(1);
}catch(SQLException ex) {
System.err.println("Tidak Berhasil Koneksi dengan Northwind");
System.exit(1);
}
}
public ResultSet select(){
ResultSet rs = null;
Statement st;
try{
st = con.createStatement();
String sql1 = "SELECT * FROM SHIPPERS";
rs = st.executeQuery(sql1);
}catch(SQLException ex) {
System.err.println("Tidak Berhasil update Northwind");
System.exit(1);
}
return(rs);
}
public void set(){
try{
Statement st = con.createStatement();
String sql2 = "UPDATE SHIPPERS SET CompanyName = 'TIKI' WHERE ShipperID=1";
st.executeUpdate(sql2);
}catch(SQLException ex) {
System.err.println("Tidak Berhasil update Northwind");
System.exit(1);
}
}
public void showShippers(ResultSet rs){
try{
ResultSetMetaData rsData = rs.getMetaData();
String kolom1 = rsData.getColumnName(1);
String kolom2 = rsData.getColumnName(2);
String kolom3 = rsData.getColumnName(3);
while (rs.next()){
System.out.print(rs.getString(kolom1)+" ");
System.out.print(rs.getString(kolom2)+" ");
System.out.println(rs.getString(kolom3)+" ");
}
}catch(SQLException ex) {
System.err.println("Tidak Berhasil retrieve Northwind");
System.exit(1);
}
}
public void dbClose(){
try {
con.close();
}catch(SQLException sqlex){
System.err.println("Error :Koneksi Database tidak Bisa diputus");
}
}
public static void main(String argv[]) throws Exception {
Set app = new Set();
ResultSet rs;
app.dbOpen();
rs = app.select();
System.out.println("Data Shippers sebelum set");
app.showShippers(rs);
app.set();
rs = app.select();
System.out.println("Data Shippers sesudah set");
app.showShippers(rs);
app.dbClose();
}
}
Soal Latihan
1.
Buat sebuah program yang membuat tabel bernama BUKU dengan struktur tabel sebagai
berikut:
Nama kolom
•
Tipe data
NAMA_BUKU
VARCHAR
ID_PENERBIT
INTEGER
HARGA
REAL
PENJUALAN
INTEGER
Panjang
40
Berikut ini adalah query untuk membuat tabel BUKU:
CREATE TABLE BUKU
(NAMA_BUKU VARCHAR(40),
ID_PENERBIT INTEGER,
HARGA REAL,
PENJUALAN INTEGER)
Karena query diatas melakukan update terhadap database maka gunakan method
executeUpdate(). Jangan lupa menentukan database yang digunakan untuk menyimpan tabel
buku terlebih dahulu!
Soal Latihan
2. Setelah membuat tabel pada nomor 1 diatas. Buatlah program yang digunakan untuk mengusi tabel
BUKU tersebut dengan data sebagai berikut:
NAMA_BUKU
ID_PENERBIT
HARGA
PENJUALAN
E-Learning
101
25000
0
Jaringan Tanpa Hardisk
203
23000
0
Oracle9i
311
54000
0
Pemrograman Java
101
49000
0
3. Setelah nomor 1 dan 2 selesai. Tampilkan semua data tabel BUKU tersebut dengan menggunakan
metode next dan getXxx. Gunakan method executeQuery();
4. Misal toko buku ini berhasil menjual buku Pemrograman Java sebanyak 5 buah. Maka lakukan update
tabel untuk mengubah kolom PENJUALAN yang sebelumnya 0 menjadi 5. Gunakan query sebagai
berikut:
UPDATE BUKU SET PENJUALAN = 5
WHERE NAMA_BUKU = ‘Pemrograman Java’
Download