Dhafiq Sagara adalah orang bodoh yang tidak bisa apa-apa, tapi dia selalu berusaha untuk terus menjadi yang lebih baik. Rasa keingin-tahuannya sangat tinggi, selalu berusaha dan terus berusaha, trial dan error adalah prinsip belajarnya.

2 Jan 2011

Membuat Aplikasi Java Sederhana Menggunakan Database Oracle (Tahap 2)

Setelah mencoba tahap 1, kita coba untuk membuat aplikasi untuk CRUD (Create, Read, Update, Delete) pada data di Oracle.

Kita mencoba untuk membuat aplikasi tersebut bisa select, insert, update delete dengan sederhana. Mulai dari menampilkan data di tabel java, sampai memberi fungsi CRUD di dalamnya.







Langsung aja deh gak usah banyak cingcong ^_^
  1. Buatlah New - Java Class, kemudian beri nama TableModelMhs. Berikut source codenya:
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.Statement;
    import java.util.Vector;
    import javax.swing.table.AbstractTableModel;
    
    public class TableModelMhs extends AbstractTableModel {
    //daftar judul-judul kolom tabel
    
    private String kolom[] = {"Nim", "Nama", "Alamat"};
    // definisi variabel Vector untuk menyimpan data dari database
    private Vector baris = new Vector();
    // set koneksi ke database
    // objek Connection kita ambil dari objek Login yang telah
    // dibuat di class FormLogin
    // Mengapa dapat kita akses? karena objek Login kita definisikan 
    // sebagai public static
    private Connection conn = LoginForm.myLgn.getConnDB();
    
    public TableModelMhs() {
    getRecDB(null);
    }
    
    public void finalize() {
    baris = null;
    conn = null;
    }
    
    // method ini berfungsi melakukan query ke database server
    // dan menampung hasilnya (dari ResultSet) ke masing-masing Vector    
    public void getRecDB(String kondisi) {
    String query;
    
    // persiapkan perintah SQL yang akan dijalankan di database server
    query = "SELECT * FROM mahasiswa";
    if (kondisi != null) {
    query = query + " WHERE " + kondisi;
    }
    query = query + " ORDER BY nim asc";
    
    try {
    // buat objek Statement dari Connection
    //  agar dapat mengeksekusi query
    Statement statement = conn.createStatement();
    ResultSet resultSet = statement.executeQuery(query);
    
    // kosongkan semua Vector
    baris.removeAllElements();
    
    // jika ada record yang diberikan dari database server
    // baca record demi record sampai selesai
    while (resultSet.next()) {
    // simpan ke dalam array masing-masing field
    //berhubung pada tabel mahasiswa ini hanya terdapat 3 kolom (nim, nama, alamat) maka dideklarasikan 3 object yang disimpan dalam array
    Object[] r = {resultSet.getString(1), resultSet.getString(2), resultSet.getString(3)};
    // tambahkan ke Vector
    baris.addElement(r);
    
    //beri nilai null untuk mencega garbage
    r = null;
    }
    } catch (java.sql.SQLException e) {
    System.out.println("Error : " + e);
    }
    query = null;
    }
    
    public int getColumnCount() {
    return kolom.length;
    }
    
    public int getRowCount() {
    return baris.size();
    }
    
    public Object getValueAt(int rowIndex, int columnIndex) {
    if (!baris.isEmpty()) {
    Object r[] = (Object[]) baris.elementAt(rowIndex);
    return r[columnIndex];
    } else {
    return null;
    }
    }
    
    public String getColumnName(int columnIndex) {
    return kolom[columnIndex];
    }
    
    // method untuk mengubah nilai pada sel Tabel
    public void setValueAt(Object aValue, int row, int column) {
    Object[] r = (Object[]) baris.elementAt(row);
    r[column] = aValue;
    baris.setElementAt(r, row);
    fireTableCellUpdated(row, column);
    }
    
    public boolean isCellEditable(int row, int column) {
    return false;
    }
    }
  2. Kemudian buatlah New - JFrame Form untuk membuat tampilannya - beri nama misalkan FormMahasiswa. Pasangkan tabel pada form ini (Palette - Swing Control - Table). Misalkan tampilan formnya adalah seperti gambar berikut:
  3. Klik kanan pada jTable - Properties - pilih pada model - pada pilihan drop down (set jTable1's model property using) pilih Costum code - isikan dengan new TableModelMhs() - Kemudian tekan OK - Close window properties. Yang dipanggil adalah class TableModel yang telah dibuat di atas.
  4. Kemudian pada menu utama, link-kan menu data mahasiswa pada FormMahasiswa yang telah dibuat diatas.
  5. Caranya double klik pada button data mahasiswa, atau klik kanan pada button data mahasiswa kemudian pilih Events - Actions - actionPerformed, isikan dengan syntax berikut:
    new FormMahasiswa().setVisible(true);//memanggil jendela FormMahasiswa
    this.setVisible(false);//menutup jendela dari class itu sendiri
    Memanggil class FormMahasiswa yang kemudian di tampilkan dengan perintah setVisible(true).
  6. Pada button Exit, lakukan hal yang sama seperti perintah 5 (double klik pada button Exit) kemudian isikan code berikut untuk mematikan proses/exit proses:
    System.exit(0);
  7. Cobalah untuk menjalankan program, Run LoginForm kemudian login sesuai user dan password pada oracle anda.
  8. Pilih menu Data Mahasiswa, maka data dari oracle anda akan ditampilkan pada jTable
  9. Jika ingin memberi fungsi pada tombol Back, beri actionPerformed dan tambahin script berikut:
    this.setVisible(false); //untuk menutup jendela dari class itu sendiri yaitu FormMahasiswa
    new MenuForm().setVisible(true);//kemudian menampilkan menu utama 


Setelah data berhasil ditampilkan, kita berikan fungsi CRUD:
  1. Pada Class FormMahasiswa tersebut, tambahkan import berikut:
    import java.sql.SQLException;
    import java.sql.Statement;
    import javax.swing.JOptionPane;
  2. Berikan actionPerformed pada tombol insert, dan tambahkan syntax berikut:
    koneksiOracle co = new koneksiOracle(); //membuat object dari class koneksiOracle
    Statement st = co.sambung();
    int a=0;
    try {
    String nim =jTextField1.getText(); //textfield nim
    String nama =jTextField2.getText(); //textfield nama
    String alamat =jTextField3.getText();//textfield alamat
    
    
    String sql = "insert into mahasiswa values('" +nim+ "', '"+nama+"','"+alamat+"')";
    
    try {
    a =st.executeUpdate(sql);
    } catch (Exception se) {
    se.printStackTrace();
    }
    if(a==0){
    JOptionPane.showMessageDialog(null, "DATA GAGAL DISIMPAN \n Silahkan Coba Lagi");
    }
    else{
    JOptionPane.showMessageDialog(null, "DATA TERSIMPAN");
    //mengosongkan textfield jika data telah tersimpan
    jTextField1.setText("");
    jTextField2.setText("");
    jTextField3.setText("");
    jTable1.setModel(new TableModelMhs());
    }
    
    } catch (Exception se) {}
  3. Pada actionPerformed Update:
    koneksiOracle co = new koneksiOracle();
    Statement st = co.sambung();
    int a = 0;
    try {
    String nim = jTextField1.getText();
    String nama = jTextField2.getText();
    String alamat = jTextField3.getText();
    String sql = "update mahasiswa set nim='" + nim + "', nama='" + nama + "', alamat='" + alamat + "'";
    
    
    try {
    a = st.executeUpdate(sql);
    } catch (Exception se) {
    se.printStackTrace();
    }
    if (a == 0) {
    JOptionPane.showMessageDialog(null, "DATA GAGAL DIUBAH \n Silahkan Coba Lagi");
    } else {
    JOptionPane.showMessageDialog(null, "DATA TELAH DIUBAH");
    jTable1.setModel(new TableModelMhs());
    }
    } catch (Exception se) {
    }
  4. Pada actionPerformed Delete:
    koneksiOracle co = new koneksiOracle();
    Statement st = co.sambung();
    
    String nim = jTextField1.getText();
    String sql = "delete from mahasiswa where nim='" + nim + "'";
    int proses = 0;
    try {
    proses = st.executeUpdate(sql);
    } catch (SQLException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
    }
    if (proses != 1) {
    JOptionPane.showMessageDialog(null, "DATA GAGAL DIHAPUS \n Ulangi Sekali Lagi");
    } else {
    JOptionPane.showMessageDialog(null, "DATA BERHASIL DIHAPUS");
    jTextField1.setText("");
    jTable1.setModel(new TableModelMhs());
    }
  5. Silahkan di coba insert data baru, update berdasarkan nim yang dipanggil di textfield nim, dan delete berdasarkan nim yang dipanggil di textfield nim. 
Semoga sukses!!!

25 komentar:

  1. pak bisa kasih tutorial search database.. ini baru insert,update,delete... thnks pak.

    BalasHapus
  2. @Yogi: lihat di spoiler artikel bersangkutan di atas, ada link terkait kan, disitu udah ada utk pencarian... ini linknya:
    http://dhafiq-san.blogspot.com/2011/05/menambahkan-fungsi-search-pada-aplikasi.html

    dan

    http://dhafiq-san.blogspot.com/2011/05/fungsi-pencarian-dengan-pilihan.html

    BalasHapus
  3. Pak.. mau tanya..jika 3 table saling ber relasi bagaimana ya coding nya?? terima kasih.

    BalasHapus
  4. baca di tutorial ini pak http://dhafiq-san.blogspot.com/2010/01/sql-query-menggabungkan-3-tabel.html

    BalasHapus
  5. kalau coding nya di java nya gmn ya pak? saya memakai java dan oracle XE dengan relasi 3 tabel.trims pak

    BalasHapus
  6. sama aja pak, masukkan aja query joinnya, baru sesuaikan jumlah kolom yg akan ditampilkan di java

    BalasHapus
  7. saya bingung di bagian ini pak..
    saya lihat dari DataHadir milik bapak.

    if (kondisi != null)
    query = query + " WHERE p.id_pasien=r.id_pasien " + kondisi;


    kalau 3 tabel hrs di tambahin apa ya di bagian sini..

    BalasHapus
  8. tanpa itu juga gpp pak, jadi querynya langsung masukkan jadi satu saja.... di query...

    BalasHapus
  9. ow iya pak sudah bisa..saya mau tanya lagi pak.. saya kan lagi bikin program tentang reservasi hotel.. bagaimana codingnya di java jika tanggal_reservasi bisa di hari yang sama tetapi no_kamar harus berbeda dan No_Kamar tidak bisa sama kecuali tanggal_reservasi itu berbeda..

    moga2 paham apa yang sama maksud..:D

    BalasHapus
  10. maksudnya itu gmn pak... masih blm paham ini pak

    BalasHapus
  11. Tidak jadi dah pak.. saya bingung jelasin nya gmn.begini saja sudah cukup kok.. terima kasih pak.blog bapak bnyk membantu tugas saya.

    BalasHapus
  12. mau nanya,kalau agar form login kita aman dari sqlijection caranya gimana ya?

    BalasHapus
  13. Percuma kalian tanya dan komen, tidak akan ada jawaban dari orang yang nulis postingan ini.

    BalasHapus
  14. @welewele: sekarang saya mau tanya balik, bagaimana cara sqlinjection ke aplikasi desktop di java? nanti dapat di antisipasi

    @anonim: ????

    BalasHapus
  15. sebenarnya mengatasi sqlinjection pada java itu dapat diterapkan konsep MVC menggunakan framework, insyaAllah aman

    BalasHapus
  16. pak, untuk form dosen nya kok ga da??? trims untuk balasannnya

    BalasHapus
  17. hadi: sama-sama gan
    anonim: ya silahkan di modifikasi sendiri :)

    BalasHapus
  18. Kemarin pas ada tugas ini aja, nyarik gak ketemu-ketemu tapi gantian nyarik tutorial JSP malah nemu java tulent.. Grrrrrra!!!

    BalasHapus
  19. wah..mksih pa buat tutorialnya, langsung terapin. :)

    BalasHapus
  20. Assalamualaikum, ijin download materinya bang admin, terima ksih sebelumnya.

    BalasHapus
  21. gimana caranya menghitung lama menginap pada hotel, yang batas checkoutnya jam 12 siang, trus terhitung satu hari walaupun belum genap 24 jam...
    mohon bantuannya....

    BalasHapus
  22. pak mudafiq..
    butuh pencerahan ni pak..
    soal pencarian dengan menggunaka algoritma hashing..

    tolong di posting juga dung pak...

    makasi,,,,,

    BalasHapus
  23. pada actionPerform Update ada yang kurang pak,
    perlu tambahan condition
    where nim='" + nim + "'

    BalasHapus
  24. pak, kalau boleh usul. tolong posting dong mengenai database sqlite manager (add ons dari firefox) dan cara peng integrasian nya dengan java netbeans. terimakasih sebelumnya :)

    BalasHapus