JAVA DATABASE CONECTIVITY (JDBC)
PENGERTIAN
JDBC (Java database connectivity) adalah
spesifikasi standar dari JavaSoft API (Aplication Programming Interface)
yang memungkinkan program Java untuk mengakses sistem database
manajemen. JDBC menyediakan methods untuk melakukan query dan modifikasi
data pada RDBMS seperti Oracle, SQL Server, MySQL, dll menggunakan Driver
Manager. JDBC mirip dengan ODBC (Open Database Connectivity), hanya saja
JDBC spesifik digunakan untuk program Java. ODBC bersifat language independent.
JDBC memiliki beberapa kegunaan,
yaitu membantu programmer untuk koneksi dengan data source, membantu
mengirimkan query dan update statements ke database, dan menerima serta
memroses hasil yang didapatkan dari database sesuai dengan query yang
diberikan.
EMPAT KOMPONEN PENTING DARI JDBC :
1. JDBC-API
JDBC-API menyediakan fasilitas untuk mengakses
database relasional dari program berbahasa Java. Melalui komponen ini user
dapat melakukan proses query dan perubahan data dalam database. JDBC-API
memiliki package utama yang tersedia pada java.sql dan javax.sql.
2. JDBC Driver
Manager
Merupakan komponen kelas utama yang mendefinisikan
object yang mengkoneksikan aplikasi Java ke JDBC driver. Komponen ini berfungsi
untuk mengatur beberapa tipe JDBC database driver yang berbeda. JDBC
Driver Manager memilih driver mana yang sesuai untuk koneksi ke suatu database.
3. JDBC Test
Suite
Komponen ketiga ini memastikan JDBC driver dapat
menjalankan program user dan sangat berguna dalam melakukan testing sebuah
aplikasi yang menggunakan teknologi JDBC.
4. JDBC-ODBC
Bridge
Adalah database driver yang menggunakan ODBC driver
untuk koneksi ke database serta memiliki fungsi utama untuk translasi dari JDBC
method calls ke ODBC function calls dan mengimplementasikan JDBC untuk semua
driver yang didukung oleh ODBC. Komponen ini dapat diimplementasikan dalam
package sun.jdbc.odbc.
JDBC MEMILIKI 10 ARSITEKTUR, YAITU :
1. Database
connections
2. SQL
Statements
3. Result set
4. Database
metadata
5. Prepared
Statement
6. Binary Large
Objects (BLOBs)
7. Character
Large Objects (CLOBs)
8. Callable
statements
9. Database
Driver
10. Driver Manager
Tipe 1 – JDBC-ODBC Bridge
§ Fungsi
- Translasi query dari JDBC ke ODBC query
- Client à JDBC Driver à ODBC Driver à Database
§ Keunggulan
- Semua database yang didukung oleh ODBC dapat
diakses
§ Kelemahan
- Performance
overhead
- ODBC driver harus diinstal di semua client
- Dibutuhkan client-side software
Tipe 2 – Java to Native API
§ Fungsi
- Konversi JDBC calls ke client API untuk database
- Client à JDBC driver à Vendor Client DB Library à
Database
§ Keunggulan
- Performa lebih baik daripada tipe 1
§ Kelemahan
- Vendor client library harus diinstal di client.
- Tidak dapat digunakan di internet karena
membutuhkan client-side software.
- Tidak semua database memberikan client-side
library
Tipe 3 – Java to Network Protocol or All-Java
Driver
§ Fungsi
- Menggunakan pendekatan three-tier communication
- Vendor independent
- Client à JDBC Driver à Middleware-Net Server à
Any database
§ Keunggulan
- Tidak membutuhkan instalasi pada client-side
- Middleware server dapat memberikan fungsi
tambahan dalam hal caching, load balancing, logging, auditing, dll.
- Dapat digunakan di internet
§ Kelemahan
- Membutuhkan program yang bersifat
database-specific untuk middle tier
- Extra layer dapat menyebabkan time-bottleneck.
Tipe 4 – Java to Database Protocol
§ Fungsi
- Melakukan komunikasi langsung dengan database
melalui koneksi socket.
- Driver berfungsi mengubah JDBC call ke database
protocol langsung
- Diimplementasikan sepenuhnya dalam Java.
- Client Machine à Native Protocol JDBC Driver à
Database Server. Contoh: Oracle Thin Driver
§ Keunggulan
- Performa cenderung meningkat à Tidak melakukan
translasi ke ODBC, tidak menggunakan client API, tidak menggunakan middleware
layer
§ Kelemahan
- Pada sisi client, driver untuk masing-masing
database harus terinstal.
BEBERAPA KONSEP PENTING DI DALAM JDBC :
Transactions
- Secara default, semua transaksi pada JDBC
bersifat auto-commit
Logging
- Digunakan untuk mengatur apakah dilakukan logging
kejadian selama transaksi dilakukan.
Concurrency
- Memastikan transaksi terjadi sesuai urutan
kronologis.
- Berhubungan dengan kemungkinan terjadinya
multikoneksi yang mengakses data yang sama.
JDBC MASIH MEMILIKI KOMPONEN PENTING LAIN, YAITU :
Package java.sql
Berisi beberapa class, interface yang digunakan
dalam transaksi.
DriverManager
Menangani segala sesuatu yang berkaitan dengan
driver yang dipakai.
DataSource
Alternatif dari DriverManager untuk melakukan
koneksi database.
JDBC Connection Object
- Object untuk melakukan koneksi dengan database
- Membuat Statement, PreparedStatement, dan
CallableStatement untuk eksekusi SQL.
- Melakukan commit dan rollback transaksi
KOMPONEN UTAMA JDBC API
JDBC API memiliki beberapa komponen utama yang
berhubungan dengan mekanisme pengolahan data baik itu untuk berkomunikasi
dengan database server, melakukan koneksi, mengirim perintah SQL, mendapatkan
data, menutup koneksi, serta penanganan error yang mungkin terjadi dalam
pengolahan data.
1. Driver adalah
komponen untuk menangani komunikasi dengan database server.
2. DriverManager adalah
komponen untuk menangani objek Driver dimana objek DriverManager juga
mengabstraksi detail dari proses kerja objek Driver.
3. Connection adalah
komponen untuk merepresentasikan koneksi secara fisik ke database
4. Statement adalah
komponen untuk mengirim perintah-perintah SQL ke database.
5. ResultSet adalah
komponen untuk menyimpan data yang didapat dari database setelah perintah SQL
dijalankan dengan menggunakan komponen Statement.
6. SQLException adalah
komponen untuk menangangi kesalahan-kesalahan (error) yang mengkin terjadi
dalam pengolahan database.
Contoh program :
import java.sql.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class CobaDatabase {
public static void main (String [] args) {
DBMahasiswa mahasiswa = new DBMahasiswa ();
}
}
class DBMahasiswa extends JFrame implements ActionListener {
final JLabel lNim,lNama,lAlamat;
final JTextField nim,nama,alamat;
final JButton btnSave,btnHapus;
final JPanel panel1,panel2;
public DBMahasiswa () {
setTitle ("Coba Database");
lNim = new JLabel ("NIM : ");
lNama = new JLabel ("NAMA : ");
lAlamat = new JLabel ("ALAMAT : ");
nim= new JTextField (20);
nama= new JTextField (20);
alamat= new JTextField (20);
btnSave = new JButton ("SIMPAN");
btnSave.addActionListener (this);
btnHapus = new JButton ("HAPUS");
btnHapus.addActionListener (this);
panel1 = new JPanel (new GridLayout (3,1));
panel2 = new JPanel (new GridLayout (3,1));
setLayout (new BorderLayout());
add (panel1, "West");
panel1.add(lNim);
panel1.add(lNama);
panel1.add(lAlamat);
add (panel2, "East");
panel2.add(nim);
panel2.add(nama);
panel2.add(alamat);
add (btnSave, "South");
add (btnHapus, "North");
pack ();
setDefaultCloseOperation (3);
setVisible (true);
}
public void actionPerformed (ActionEvent ae) {
if (ae.getSource()==btnSave) {
String sql = "insert into mahasiswa values('"+nim.getText()+"', '"+nama.getText()+"', '"+alamat.getText()+"')";
try {
//untuk database SQL
/*Class.forName ("org.gjt.mm.mysql.Driver");
Connection con = DriverManager.getConnection ("jdbc:mysql://localhost/praktikum", "root", "");*/
//untuk database ACCESS
Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection ("jdbc:odbc:coba", "", "");
Statement stmt = con.createStatement();
stmt.executeUpdate (sql);
stmt.close();
con.close();
JOptionPane.showMessageDialog (this, "Data berhasil disimpan", "Hasil",JOptionPane.INFORMATION_MESSAGE);
}
catch (Exception e){
JOptionPane.showMessageDialog (this, e.getMessage (), "Hasil", JOptionPane.ERROR_MESSAGE);
}
}
if (ae.getSource ()==btnHapus) {
int pesan = JOptionPane.showConfirmDialog (null, "Anda yakin ingin menghapus pegawai\n"+
"dengan NIM ='"+ nim.getText ()+"'", "Konfirmasi Hapus Data", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
if (pesan == JOptionPane.OK_OPTION) {
String sql = " DELETE from mahasiswa where nim='"+nim.getText()+"'";
try {
// Untuk Database SQL
/*Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection ("jdbc:odbc:java", "", "");*/
//untuk database ACCESS
Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection ("jdbc:odbc:coba", "", "");
Statement stmt = con.createStatement();
stmt.executeUpdate (sql);
stmt.close();
con.close();
JOptionPane.showMessageDialog (this, "Data berhasil dihapus", "Hasil",JOptionPane.INFORMATION_MESSAGE);
}
catch (Exception e){
JOptionPane.showMessageDialog (this, e.getMessage (), "Hasil", JOptionPane.ERROR_MESSAGE);
}
}
}
System.exit (0);
}
}
OUTPUT :
Code program :
import java.sql.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class LihatDatabase {
public static void main (String [] args) {
LihatData data = new LihatData ();
}
}
class LihatData extends JFrame {
public LihatData () {
setTitle ("Lihat Database");
String tdata[][] = new String [0][0];
try {
//Untuk Database menggunakan SQL
/*Class.forName ("org.gjt.mm.mysql.Driver");
Connection conn = DriverManager.getConnection ("jdbc:mysql://localhost/praktikum", "root", "");*/
//Untuk Database menggunakan ACCESS
Class .forName ("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn = DriverManager.getConnection ("jdbc:odbc:coba", "", "");
Statement stmt = conn.createStatement ();
//Sintaks sql yang dibawa
String sql = "select * from mahasiswa";
// Hasilnya ditampung disini
ResultSet rs = stmt.executeQuery (sql);
tdata = new String [500] [3];
int p=0;
// Jika data berikutnyua ada, maka...
while (rs.next ()) {
//kita dapatkan data dari kolom 1
tdata [p][0] = rs.getString (1);
tdata [p][1] = rs.getString (2);
tdata [p][2] = rs.getString (3);
p++;
}
// stmt dibebaskan dari memori
stmt.close();
// koneksi ditutup
conn.close();
}
catch (Exception exc) {
JOptionPane.showMessageDialog (this, "ERROR", "Hasil", JOptionPane.ERROR_MESSAGE);
}
String [] nkolom = {"Nim", "Nama", "Alamat"};
JTable tabel = new JTable (tdata,nkolom);
JScrollPane gridtabel = new JScrollPane (tabel);
tabel.setPreferredScrollableViewportSize (new Dimension (400,300));
setLayout (new FlowLayout ());
add (gridtabel);
pack();
setDefaultCloseOperation(3);
setVisible (true);
}
}
OUTPUT :
Tidak ada komentar:
Posting Komentar