PEMROGRAMAN JARINGAN JDBC
IV - 1
PRAKTIKUM IV JDBC 1. Tujuan Siswa dapat membuat aplikasi database sederhana menggunakan koneksi JDBC.
2. Praktikum 2.1. Penunjang JDBC Database berisi sekumpulan objek tabel, stored procedure, dan objek lainnya. Contoh software database yaitu Microsoft Access, SQL Server, Oracle, MySQL. Java menciptakan sebuah teknologi pengaksesan database dengan nama JDBC (Java Database Connectivity). JDBC merupakan sekumpulan API yang digunakan untuk mengeksekusi pernyataan SQL pada platform Java. Pada latihan di modul ini kita akan menggunakan database MySQL yang dapat didownload secara gratis pada websitenya. MySQL biasanya dijalankan lewat command-line, namun Netbeans menyediakan editor yang dapat digunakan untuk mengeksekusi pernyataan SQL dengan lebih aktraktif. Jadi software yang perlu dipersiapkan: -
MySQL
-
Driver / Connector Java-MySQL
2.2. Latihan a.
Ikuti langkah-langkah di bawah ini.
PEMROGRAMAN JARINGAN JDBC
IV - 2
b. Extract file Connector Java-MySQL. Copy file hasil extract yang berupa .jar tersebut ke dalam folder jdk anda, seperti: C:\Program Files\Java\jdk1.6.0\jre\lib\ext c. Registrasi driver dalam Netbeans. Pada bagian Services di sebelah kanan, klik bagian Databases, klik pada Drivers dan cek apakah sudah ada MySQL Connector/ J driver. Kemudian cek bagian Database Connection, apakah sudah ada node jdbc:mysql:// [root on Default schema] yang merupakan koneksi MySQL kosong (tidak mengakses database apapun). d. Buat database. Database di dalam MySQL dibuat dengan menggunakan koneksi kosong jdbc:mysql:// [root on Default schema]. -
Pastikan server MySQL sudah jalan.
-
Klik kanan pada node koneksi kosong, pilih Connect.
Masukkan passwod MySQL anda. -
Pada jendela editor, ketik:
CREATE DATABASE buku -
Kemudian klik tombol Run SQL.
e. Membuat koneksi database. Pada bagian Services-> Databases-> Drivers-> MySQL (Connector/ J driver). Klik kanan, pilih Connect using. Isi semua data yang perlu. Check pada Show JDBC URL. URL yang terbentuk jika dikoneksikan ke
database
buku
yang
dibuat
di
atas,
seperti
ini:
jdbc:mysql://localhost/books f. Membuat tabel. Anda bisa membuat tabel dengan menggunakan menu Create Table, namun cara ini memiliki keterbatasan seperti tidak dapat menentukan auto-increment atau foreign-key. Cara yang lebih baik dengan menggunakan statemen SQL. Seperti di bawah: Klik kanan pada jdbc:mysql://localhost:3306/buku, pilih Execute Command. Pada jendala editor, ketikkan: CREATE TABLE penerbit(
PEMROGRAMAN JARINGAN JDBC
IV - 3
id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, nama VARCHAR(40), kota VARCHAR(20), INDEX (nama) ) ENGINE=MyISAM; Kemudian klik tombol Run SQL. Kemudian buat satu table lagi yaitu tabel buku, seperti di bawah: CREATE TABLE buku( id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, ISBN VARCHAR(14) NULL UNIQUE, judul VARCHAR(60) NOT NULL, tahun DATE, id_penerbit INTEGER REFERENCES penerbit(id) ON DELETE CASCADE ON UPDATE CASCADE, penulis VARCHAR(60) NOT NULL, INDEX (judul), INDEX (tahun), INDEX (id_penerbit), INDEX (penulis) ) ENGINE=MyISAM; Cek pada jdbc:mysql://localhost:3306/buku apakah sudah ada tables buku dan penerbit. Kalau belum coba refresh.
PEMROGRAMAN JARINGAN JDBC
IV - 4
g. Mengisi data ke dalam tabel. Kita akan mengisi data ke dalam tabel penerbit, dengan cara klik kanan pada database, dan Execute Command: INSERT INTO penerbit (nama, kota) VALUES ("Penerbit ANDI", "Jogyakarta DIY"), ("Sams Publishing", "Indianapolis IN"), ("John Wiley & Sons", "New York NY"), ("McGraw-Hill", "New York NY"), ("Prentice Halls", "Englewood Cliffs NJ"), ("Addison Wesley", "Reading MA"), ("Wrox Press", "Birmingham UK"); Kemudian isi data ke dalam tabel buku seperti berikut: INSERT
INTO
buku
(ISBN,
judul,
tahun,
id_penerbit,
penulis) VALUES ("979-731-748-6", "Java 2 SE dengan JBuilder", "2005/1/1",
"1",
"Matius
Soesilo
Wijono,
G.
Sri
Hartati, B. Herry Suharto"), ("979-763-145-1", "Membangun Aplikasi Menggunakan Qt
Designer",
"2006/1/1",
Soesilo Wijono"),
"1",
"B.
Herry
Suharto,
PEMROGRAMAN JARINGAN JDBC ("067-231-914-4", days",
"2000/1/1",
IV - 5
"Teach
"2",
Yourself
"Mark
MySQL
in
Maslakowski,
21
Tony
Butcher"), ("186-100-833-3", "Beginning J2EE 1.4", "2003/1/1", "7", "Ivor Horton, James L. Weaver, Kevin Mukhar"), ("186-100-425-7", "Professional Java Security", "2001/1/1", "7", "Jess Garms, Daniel Somerfield"); h. Menampilkan isi tabel. Pada tabel yang ingin anda tampilkan, klik kanan dan pilih View Data. i.
Setelah
pada
langkah-langkah
sebelumnya
kita
membuat
database dan tabel di dalamnya, sekarang kita akan membuat program Java
yang
akan
melakukan
koneksi
terhadap
menampilkan isi tabel sesuai dengan statemen SQL. j. Tampilan pada Command line. Pilih New-> Java class Ketik coding di bawah: import java.sql.*; public class BookList { /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here Connection con = null; Statement stmt = null; ResultSet rs = null;
database
dan
PEMROGRAMAN JARINGAN JDBC try{ //loading driver MySQL/J Class.forName("com.mysql.jdbc.Driver"); //membuat koneksi database con = DriverManager.getConnection("jdbc:mysql://localhost/books", "root", "mysql"); //statemen sql statik stmt = con.createStatement(); //eksekusi SQL-statemen untuk tabel buku rs = stmt.executeQuery("SELECT * FROM buku"); //ambil data result-set ResultSetMetaData rsmd = rs.getMetaData(); int nColumn = rsmd.getColumnCount(); //tampilkan judul kolom for(int i=1; i<=nColumn; i++) System.out.print(rsmd.getColumnName(i) + " | "); System.out.println(); //tampilkan hasil query berupa data result-set dari tabel while(rs.next()){ System.out.println(rs.getLong(1) + "\t" + rs.getString(2) + ", \"" + rs.getString(3) + "\", (" + rs.getDate("tahun") + "), \\" + rs.getLong("id_penerbit") + "\n\t [" + rs.getString("penulis") + "]");
IV - 6
PEMROGRAMAN JARINGAN JDBC } } catch(ClassNotFoundException e){ System.err.println("Error loading driver: " + e.getMessage()); } catch(SQLException e){ System.err.println("Error SQL: " + e.getMessage()); } finally{ //close database & resource JDBC try{ if(rs != null) rs.close(); } catch(SQLException sqle){} try{ if(stmt != null) stmt.close(); } catch(SQLException sqle){} try{ if(con != null) con.close(); } catch(SQLException sqle){} } } }
k. Tampilan menggunakan GUI.
IV - 7
PEMROGRAMAN JARINGAN JDBC
IV - 8
Buat kelas PubTableModel yang khusus menangani pengembalian data pada setiap baris: import javax.swing.table.AbstractTableModel; import java.sql.*; import java.util.ArrayList; public class PubTableModel extends AbstractTableModel{ private int colnum = 3; private int rownum ; private String[] colNames = {"ID", "Nama Penerbit", "Kota"}; private ArrayList<String[]> ResultSets; public PubTableModel(ResultSet rs) { ResultSets = new ArrayList<String[]>(); try{ while(rs.next()){ String[] row = { rs.getString("id"), rs.getString("nama"), rs.getString("kota")}; ResultSets.add(row); } } catch(Exception e){ System.out.println("Exception in PubTableModel"); } } public Object getValueAt(int rowIndex, int columnIndex){ String[] row = ResultSets.get(rowIndex);
PEMROGRAMAN JARINGAN JDBC
IV - 9
return row[columnIndex]; } public int getRowCount(){ return ResultSets.size(); } public int getColumnCount(){ return colnum; } public String getColumnName(int param){ return colNames[param]; } } Kemudian buat Jframe, tambahkan komponen Jtable kedalamnya. Buka bagian source.
Ketik seperti di bawah. Bagian yang
dihitamkan (BOLD) yang perlu ditambah secara manual, sisanya merupakan generated code. import java.sql.*; public class PubList extends javax.swing.JFrame { Connection con = null; Statement stmt = null; ResultSet rs; /** Creates new form PubList */ public PubList() { try{ //loading driver MySQL/J Class.forName("com.mysql.jdbc.Driver");
PEMROGRAMAN JARINGAN JDBC
IV - 10
} catch(ClassNotFoundException e){ System.err.println("Error loading driver: " + e.getMessage()); } try{ //membuat koneksi database con = DriverManager.getConnection("jdbc:mysql://localhost/book s", "root", "mysql"); //statemen sql statik stmt = con.createStatement(); } catch(SQLException e){ System.err.println("Error SQL: " + e.getMessage()); } initComponents(); rs = getResultData(); jTable1.setModel(new PubTableModel(rs)); closeResultSet(rs); } public ResultSet getResultData(){ ResultSet rs = null; try{ //eksekusi SQL-statemen untuk tabel penerbit rs = stmt.executeQuery("SELECT * FROM penerbit"); } catch(SQLException e){ System.err.println("Error SQL: " + e.getMessage());
PEMROGRAMAN JARINGAN JDBC
IV - 11
} return rs; } public void closeResultSet(ResultSet rs){ if(rs != null){ try{ rs.close(); } catch(SQLException e){ System.err.println("Error SQL: " + e.getMessage()); } } } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { jScrollPane1 = new javax.swing.JScrollPane(); jTable1 = new javax.swing.JTable(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT _ON_CLOSE);
PEMROGRAMAN JARINGAN JDBC setTitle("Tabel Penerbit"); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { formWindowClosing(evt); } }); jScrollPane1.setViewportView(jTable1); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Align ment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 375, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(15, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Align ment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addContainerGap(14, Short.MAX_VALUE) .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 275, javax.swing.GroupLayout.PREFERRED_SIZE)
IV - 12
PEMROGRAMAN JARINGAN JDBC .addContainerGap()) ); pack(); }// private void formWindowClosing(java.awt.event.WindowEvent evt) { // TODO add your handling code here: //lepaskan resource statement if(stmt != null){ try{ stmt.close(); } catch(SQLException e){ System.err.println("Error SQL: " + e.getMessage()); } } //lepaskan koneksi database if(con != null){ try{ con.close(); } catch(SQLException e){ System.err.println("Error SQL: " + e.getMessage()); } } }
IV - 13
PEMROGRAMAN JARINGAN JDBC /** * @param args the command line arguments */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new PubList().setVisible(true); } }); } // Variables declaration - do not modify private javax.swing.JScrollPane jScrollPane1; private javax.swing.JTable jTable1; // End of variables declaration }
Run program, hasilnya dapat dilihat seperti ini:
IV - 14
PEMROGRAMAN JARINGAN JDBC
3. Tugas 1) Buat tampilan GUI untuk menampilkan data-data di dalam tabel buku.
IV - 15