Kamis, 16 Januari 2014

JAVA DATABASE CONECTIVITY (JDBC) PERTEMUAN BAB 12

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 :


J Menu PERTEMUAN BAB 10

 J Menu

MENU adalah komponen yang berbentuk grup fungsi pemprosesan yang berkaitan dengan 
fitur-fitur suatu aplikasi. 
itulah pengertian menu pada java, nah skarang kita langsung mlihat contohnya

Contoh kode program nya :

import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
class CobaMenu extends JFrame{
JMenuBar menuBar;
JMenu file, doc, edit, help;
JMenuItem open, save, exit, delete, copy, paste, about;

public CobaMenu(){
setTitle("Menu");
setSize(200,200);
file= new JMenu ("File");
file.setMnemonic('F');
doc= new JMenu ("Document");
doc.setMnemonic('D');
edit= new JMenu ("Edit");
edit.setMnemonic('E');
help= new JMenu ("Help");
help.setMnemonic('H');
open= new JMenuItem ("Open");
open.setMnemonic('O');
save= new JMenuItem ("Save");
save.setMnemonic('S');
exit= new JMenuItem ("Exit");
exit.setMnemonic('X');
delete= new JMenuItem ("Delete");
delete.setMnemonic('L');
copy= new JMenuItem ("Copy");
copy.setMnemonic('C');
paste= new JMenuItem ("Paste");
paste.setMnemonic('P');
about= new JMenuItem ("About");
about.setMnemonic('A');


menuBar= new JMenuBar();
setJMenuBar(menuBar);
menuBar.add(file);
file.add(open);
file.add(save);
file.addSeparator();
file.add(exit);
menuBar.add(doc);
doc.add(edit);
edit.add(copy);
edit.add(paste);
edit.add(delete);
menuBar.add(help);
help.add(about);

exit.addActionListener (new ActionListener(){
public void actionPerformed (ActionEvent e ){
System.exit(0);
}

});

setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
}

public class MainMenu{
public static void main (String[] neno){
CobaMenu m= new CobaMenu();
}
}

 penjelasan program  :
         membuat kelas CobaMenu yang merupakan turunan dari kelas JFrame, isinya membuat menubar (untuk menempatkan menu-menu), membuat menu file, doc, edit, help, kemudian membuat menuitem (untuk menyusun item menu yang berupa teks atau label, termasuk membuat shortcut dari keyboard).
         selanjutnya didalam kelas CobaMenu dibuat judul Menu, ukuran form nya 200*200. dibuat menu File menu Document, Edit, Help. dibuat menu item open, save, exit, delete, copy, paste, about. lalu diatur lah kemana menu apa menu item- menu item tersebut dimasukkan. setelah diatur dibuat pula kode untuk mengaktifkan tombol close pada form yang muncul.
Hasilnya seperti dibawah ini :
                       
Kita membuat 3 Menu yaitu : File, Document, Help. 
                      
Didalam menu File terdapat open, save, exit.Kalau exit diklik maka akan menutup system.         
                     
                     
Didalam menu Document terdapat edit dan didalam edit ada copy, paste, dan delete, terakhir menu Help ada about. 
Contoh program yang lain :

import java.awt.event.*;
import javax.swing.*;
import java.awt.*;

class FFrame extends JFrame implements ActionListener{
JButton btnTutup= new JButton ("TUTUP");

public FFrame(){
super ("Frame");
setSize(200,100);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setLayout(null);
add(btnTutup);
btnTutup.addActionListener(this);
btnTutup.setBounds(40,20,100,20);
setVisible(true);
}

public void actionPerformed(ActionEvent e){
if(e.getSource()==btnTutup){
dispose();
}
}
}


ketika dijalankan maka dia akan meminta kelas utama karena ini bukan kelas induk. Selanjutnya kita buat lagi kelas yang lain, yang hampir sama dengan kode diatas.

import java.awt.event.*;
import javax.swing.*;
import java.awt.*;

class FDialog extends JDialog implements ActionListener{
JButton btnTutup= new JButton ("TUTUP");

public FDialog(){
setTitle ("Dialog");
setSize(200,100);
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
setLayout(null);
add(btnTutup);
btnTutup.addActionListener(this);
btnTutup.setBounds(40,20,100,20);
setVisible(true);
}

public void actionPerformed(ActionEvent e){
if(e.getSource()==btnTutup){
dispose();
}
}
}

Program ini sama dengan program FFrame.java yang juga membutuhkan kelas utama. Berikut kode kelas utamanya:

import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
class Menu extends JFrame{
JMenuBar menuBar;
JMenu file, buatBaru;
JMenuItem exit, frame, dialog, pesan;

public Menu(){
setTitle("Menu");
setSize(200,200);
file= new JMenu("File");
file.setMnemonic('F');
buatBaru= new JMenu("BuatBaru");
buatBaru.setMnemonic('B');
exit= new JMenuItem("Exit");
exit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,ActionEvent.CTRL_MASK));
frame= new JMenuItem("Frame");
frame.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F,ActionEvent.CTRL_MASK));
dialog= new JMenuItem("Dialog");
dialog.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D,ActionEvent.CTRL_MASK));
pesan= new JMenuItem("Pesan");
pesan.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,ActionEvent.CTRL_MASK));

menuBar= new JMenuBar();
setJMenuBar(menuBar);
menuBar.add(file);
file.add(exit);
menuBar.add(buatBaru);
buatBaru.add(frame);
buatBaru.add(dialog);
buatBaru.add(pesan);

exit.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.exit(0);
}
});
frame.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
new FFrame();
}
});
dialog.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
new FDialog();
}
});
pesan.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
JOptionPane.showMessageDialog(null,"Tutup?","Pesan",JOptionPane.QUESTION_MESSAGE);
}
}
);

setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
}

public class MainMenu1{
public static void main (String[] neno){
new Menu();
}

penjelasan  kode :
         Sama dengan contoh program pertama yang membuat menu-menu. sekarang yang dibuat menu file dan BuatBaru, namun didalam kode ini akan dipanggil method FFrame dan FDialog, kedua method tersebut sudah kita kerjakan yang isinya hanya membuat button dengan nama tutup, sehingga ketika kita klik frame dari menu BuatBaru maka yang keluar button tutup saja. begitu juga dengan menu item dialog ketika diklik, namun untuk pesan akan menampilkan kotak pesan. anda bisa melihatnya saat anda berhasil menjalankan program tersebut.
hasilnya sbb :

Program diatas menampilkan 2 menu yaitu File dan BuatBaru.
apakah isi dari kedua menu tersebut?
sewaktu menu file diklik maka yang muncul adalah :
                                           
dan ketika menu BuatBaru diklik maka yang muncul adalah :
                                          ..
anda bisa mencoba menekan isi dari pada setiap menu, termasuk menggunakan keyboard untuk menjalankan shortcut yang dibuat.