Praktikum Pemrograman Berorientasi Objek MODUL X JAVA DATABASE I. TUJUAN 1. Memahami Konsep Graphical User Interface (GUI) di Java dan Komponen Dasar Swing 2. Memahami koneksi database menggunakan JDBC dan JDBC API 3. Mampu membuat aplikasi database sesuai dengan studi kasus nyata di masyarakat II. DASAR TEORI 1. API untuk Aplikasi GUI di Java a. AWT (Abstract Window Toolkit) Library dan komponen GUI (java.awt) yang pertama kali diperkenalkan oleh Java, Sun tidak merekomendasikan lagi penggunaan komponen GUI dari AWT b. Swing or JFC (Java Foundation Class) Library dan komponen GUI (javax.swing) terbaru dari Java dan yang direkomendasikan Sun untuk pemrograman GUI. Komponen Swing sebagian besar adalah turunan AWT dan lebih lengkap daripada AWT 2. Fitur Swing a. Komponen GUI Lengkap Æ button, listbox, combobox, textarea, dsb b. Pluggable Look-and-Feel Æ tampilan GUI dapat diubah sesuai dengan kehendak (tidak perlu mengikuti native sistem operasi) c. Data Transfer Antar Komponen Æ drag and drop, copy and paste d. Internationalization Æ proses desain aplikasi yang memungkinkan aplikasi dijalankan sesuai dengan preferensi tanpa rekompilasi e. Localization Æ proses translasi teks ke bahasa lokal dan menambahkan komponen lokal 3. Komponen Swing a. Top-Level Container Kontainer dasar dimana komponen lainnya diletakkan (JFrame, JDialog dan Applet) a. Intermediate Container Kontainer perantara dimana komponen lainnya diletakkan (JPanel, JScrollPane, JTabbedPane, JToolbar, JSplitPane) b. Atomic Component Komponen yang memiliki fungsi spesifik dan menerima interaksi langsung dari user (JButton, JLabel, JTextArea, dsb) c. Layout Manager Mengatur tata letak dan posisi komponen dalam kontainer (BorderLayout, BoxLayout, FlowLayout, GridBagLayout, GridLayout) d. Event Handling Menangani event yang dilakukan user (klik mouse, ketik keyboard, perbesar frame, dsb) IX- 1 Prakttikum Pemrograman Bero orientasi Obje ek 4. JDBC dan JDBC API A JDBC adalah stand dar Java Dataabase Connecctivity , dan JDBC API merupakan Java Databasee Conneectivity Application Program mming Interface ( API JDBC C ). Semua ko omponen dan n teknik JDBC C tertanaam dan diimplementasikan dalam JDBC API . Pada daasarnya , JDBC API terdiri dari satu sett kelas dan interfa ace yang diggunakan untuk berinterakssi dengan daatabase dari aplikasi Java.. Umum mnya, JDBC AP PI melakukan 3 (tiga) fungsi berikut : a. Membangun hubbungan antara aplikasi Java dan d database terkait t b. Membangun dan mengeksekussi pernyataan SQL c. Memproses hasill Beberaapa vendor database d yang berbeda meenyediakan beerbagai driverr JDBC untukk mendukungg aplikasi mereka ke database. d Kom mponen JDBC paling populeer terletak di ppaket berikut : a. javaa.sql : terdiri dari d komponeen JDBC stand dar b. javaax.sql : berisi standard pendukung JDB BC , yang mennyediakan fituur tambahan , seperti Javaa Naming and Direectory Interfaace (JNDI) daan Java Transsaction Servicee (JTS). c. oraacle.jdbc : beriisi fungsi pend dukung yang disediakan d olehh java.sql dan javax.sql interrface. d. oraacle.sql : berisi kelas dan intterface yang menyediakan m p pemetaan Javaa untuk SQL 5. JDBC Componen nts dan Arch hitecture JDBC API A disebut juuga driver JDB BC, yang men ngimplementasikan semua kkomponen JD DBC termasukk kelas dan d interface,, untuk mem mbangun koneeksi dan mem manipulasi datta antara aplikasi Java dann database yang dipilihh. JDBC API A berisi 2 (d dua) set utama dari antarmuka, yaitu : a. JDB BC API Æ aplikasi (antarmuuka untuk apliikasi Java Anda ) b. JDB BC driver APII Æ driver (anntarmuka untu uk database Anda A ) Gambar 9.1. The e componen nts and archiitecture of a JDBC API IX- 2 Praktikum Pemrograman Berorientasi Objek Tabel 9.1. Classes defined in the JDBC API Classes Function DriverManager Handle loading and unloading of drivers and establish a connection to a database All methods defined in this class are used to setup or retrieve properties of a driver. The properties can then be used by the Connection object to connect to the database The Type class is only used to define the constants used for identifying of the SQL types This class contains methods to perform conversion of SQL date formats and Java Date objects This class is similar to the Date class, and it contains methods to convert between SQL time and Java Time object This class provides additional precision to the Java Date object by adding a nanosecond field DriverPropertyInfo Type Date Time TimeStamp Tabel 9.2. Interfaces defined in the JDBC API Interfaces Function Driver The primary use of the Driver interface is to create the Connection objects. It can also be used for the collection of JDBC driver meta data and JDBC driver status checking This interface is used for the maintenance and status monitoring of a database session. It also provides data access control through the use of transaction locking The Statement methods are used to execute SQL statements and retrieve data from the ResultSet object This interface is used to execute precompile SQL statements. Precompile statements allow for faster and more efficient statement execution, and more important, it allows running dynamic query with querying parameters ’ variation. This interface can be considered as a subclass of the Statement This interface is mainly used to execute SQL stored procedures. Both IN and OUT parameters are supported. This interface can be considered as a subclass of the Statement The ResultSet object contains the queried result in rows and columns format. This interface also provides methods to retrieve data returned by an SQL statement execution. It also contains methods for SQL data type and JDBC data type conversion This interface contains a collection of metadata information or physical descriptions associated with the last ResultSet object This interface contains a collection of metadata regarding to the database used, including the database version, table names, columns, and supported functions Connection Statement PreparedStatement CallableStatement ResultSet ResultSetMetaData DatabaseMetaData IX- 3 Prakttikum Pemrograman Bero orientasi Obje ek 6. Cara Kerja K JDBC G Gambar 9.2.. Cara Kerja a JDBC Gam mbar 9.3. Source Code JDBC J Test 7. Tahap pan Akses Database D IX- 4 Praktikum Pemrograman Berorientasi Objek III. GUIDED (APLIKASI BIODATA) 1. Buatlah database dengan menggunakan mySQL, dengan desain tabel sebagai berikut : CREATE TABLE anggota ( -> id INT NOT NULL AUTO_INCREMENT, nama VARCHAR(50) NOT NULL, -> alamat VARCHAR(100) NOT NULL, -> telp VARCHAR(30) NOT NULL, -> PRIMARY KEY (id )); 2. Buatlah aplikasi biodata dengan desain seperti gambar dibawah ini. Langkah-langkah : a. Buatlah projek baru di Netbeans pilih File Æ New Project. b. Pilih Categories Æ Java dengan Projects Æ Java Application Æ klik Next. c. Isi nama project dengan TestDatabase dan pilih lokasi (folder) project yang akan Anda kerjakan d. Hilangkan tanda (V) pada check box Set as Main Project dan Create Main Class Æ klik finish e. Kemudian desainlah sebuah tampilan aplikasi seperti gambar dibawah ini Text Field MySQL JDBC Label jTabel Button f. Kemudian buatlah source code berikut ini : package tes.database; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import javax.swing.JOptionPane; import javax.swing.table.DefaultTableModel; public class FormKoneksi extends javax.swing.JFrame { private static Connection koneksi; private DefaultTableModel model; /** * Creates new form FormKoneksi */ public FormKoneksi() { initComponents(); model=new DefaultTableModel(); this.jTable1.setModel(model); IX- 5 Praktikum Pemrograman Berorientasi Objek model.addColumn("ID"); model.addColumn("Nama"); model.addColumn("Alamat"); model.addColumn("Telepon"); ambil_data_tabel(); } private static Connection buka_koneksi() { if (koneksi==null) { try { String url="jdbc:mysql://localhost:3306/belajar"; String user="root"; String password=""; DriverManager.registerDriver(new com.mysql.jdbc.Driver()); koneksi=DriverManager.getConnection(url,user,password); }catch (SQLException t) { System.out.println("Error membuat koneksi"); } } return koneksi; } private void ambil_data_tabel() { model.getDataVector().removeAllElements(); model.fireTableDataChanged(); try { Connection c=buka_koneksi(); Statement s= c.createStatement(); String sql="Select * from anggota"; ResultSet r=s.executeQuery(sql); while (r.next()) { Object[] o=new Object[4]; o[0]=r.getString("id"); o[1]=r.getString("nama"); o[2]=r.getString("alamat"); o[3]=r.getString("tlp") model.addRow(o); } r.close(); s.close(); ambil_tabel_klik(); }catch(SQLException e) { System.out.println("Terjadi kesalahan "+e.getMessage()); } } private void ambil_tabel_klik() { int i=this.jTable1.getSelectedRow(); if(i==-1) { return; } String kode=(String) model.getValueAt(i, 0); this.lblKode.setText(kode); String nama=(String) model.getValueAt(i, 0); this.TxtNama.setText(nama); String alamat=(String) model.getValueAt(i, 1); this.TxtAlamat.setText(alamat); String tlp=(String) model.getValueAt(i, 2); this.TxtTelepon.setText(tlp); } IX- 6 Praktikum Pemrograman Berorientasi Objek private void jTable1MouseClicked(java.awt.event.MouseEvent evt) { // TODO add your handling code here: this.ambil_tabel_klik(); } private void cmbAddActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: Connection c=buka_koneksi(); if("Add".equals(this.cmbAdd.getText())) { this.cmbAdd.setText("Save"); this.cmbEdit.setText("Cancel"); this.cmbDelete.enable(false); this.cmbRefresh.enable(false); this.lblKode.setText("0"); this.TxtNama.setText(""); this.TxtAlamat.setText(""); this.TxtTelepon.setText(""); }else if("Save".equals(this.cmbAdd.getText())) { String sqlkode="Insert into anggota (`nama`,`alamat`,`tlp`) " + "values ('"+this.TxtNama.getText()+"'," + "'"+this.TxtAlamat.getText()+"'," + "'"+this.TxtTelepon.getText()+"')"; try { PreparedStatement p2=(PreparedStatement) c.prepareStatement(sqlkode); p2.executeUpdate(); p2.close(); } catch (SQLException ex) { JOptionPane.showMessageDialog(this, "Terjadi kesalahan "+ex.getMessage()); } this.cmbAdd.setText("Add"); this.cmbEdit.setText("Edit"); this.cmbDelete.enable(true); this.cmbRefresh.enable(true); }else if("Update".equals(this.cmbAdd.getText())) { String sqlkode="Update anggota SET `nama`='"+this.TxtNama.getText()+"'," + "`alamat`='"+this.TxtAlamat.getText()+"'," + "`tlp`='"+this.TxtTelepon.getText()+"' " + "Where ID='"+this.lblKode.getText()+"'"; try { PreparedStatement p2=(PreparedStatement) c.prepareStatement(sqlkode); p2.executeUpdate(); p2.close(); } catch (SQLException ex) { JOptionPane.showMessageDialog(this, "Terjadi kesalahan "+ex.getMessage()); } this.cmbAdd.setText("Add"); this.cmbEdit.setText("Edit"); this.cmbDelete.enable(true); this.cmbRefresh.enable(true); } } private void cmbEditActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: if("Edit".equals(this.cmbEdit.getText())) { this.cmbAdd.setText("Update"); IX- 7 Praktikum Pemrograman Berorientasi Objek this.cmbEdit.setText("Cancel"); this.cmbDelete.enable(false); this.cmbRefresh.enable(false); }else if("Cancel".equals(this.cmbEdit.getText())) { this.cmbAdd.setText("Add"); this.cmbEdit.setText("Edit"); this.cmbDelete.enable(true); this.cmbRefresh.enable(true); } } private void cmbDeleteActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: Connection c=buka_koneksi(); String sqlkode="Delete from anggota " + "Where ID='"+this.lblKode.getText()+"'"; try { PreparedStatement p2=(PreparedStatement) c.prepareStatement(sqlkode); p2.executeUpdate(); p2.close(); } catch (SQLException ex) { JOptionPane.showMessageDialog(this, "Terjadi kesalahan "+ex.getMessage()); } } private void cmbRefreshActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: ambil_data_tabel(); } /* Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new FormKoneksi().setVisible(true); } }); } // Variables declaration - do not modify private javax.swing.JTextField TxtAlamat; private javax.swing.JTextField TxtNama; private javax.swing.JTextField TxtTelepon; private javax.swing.JButton cmbAdd; private javax.swing.JButton cmbDelete; private javax.swing.JButton cmbEdit; private javax.swing.JButton cmbRefresh; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JPanel jPanel1; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JTable jTable1; private javax.swing.JLabel lblKode; // End of variables declaration } IX- 8