Home > java > Membuat JTable AutoUpdate

Membuat JTable AutoUpdate

Saya pernah mendapat masalah pada awal membuat Desktop Aplikasi dengan Java. Pada saat membuat aplikasi database biasanya kita sering menyertakan table sebagai tempat untuk melihat isi dari database kita. Nahh.. tapi saat melakukan aksi controller (Seperti : Simpan, Update & Delete) table tersebut tidak reaktif padahal data sudah dihapus tetap aja nongol….. Keselkan..!!!

Setelah mencoba mencari referensi dengan susah payah, akhir saya mengetahui keyataan bahwa (kesannya gimana gituuu..) dalam pemrograman java dibuat menggunakan konsep MVC (Model View Controller). Dimana setiap komponen terdiri dari bagian Model, bagian View, dan bagian Controller.

- Model, merupakan bagian yang digunakan untuk menampung data

-View, merupakan bagian untuk menampilkan data

- Controller, merupakan bagian yang digunakan untuk proses manipulasi data.

dalam kasus ini, yang merupakan Model adalah TableModel. yang merupakan View adalah JTable. dan yang merupakan controller adalah proses insert, update, delete dan event yang digunakan oleh TableModel dan JTable.

Balik ke topik utama..

Sesuai dengan judul tulisan, sekarang kita akan membuat table yang autoupdate.

Pertama yang harus dilakukan adalah membuat class Query dimana class ini akan menghubungkan aplikasi dengan database serta melakukan aksi2 ke database.

Berikut source code-nya* :

/*
 * DILARANG MENGUBAH ATAU MENGHAPUS LICENSE INI
 *
 * Copyrighted 2009 ekspertme@gmail.com
 * All rights reserved
 *
 * Semua isi dalam file ini adalah hak milik ekspertme@gmail.com
 * anda tidak diperkenankan untuk menggunakan atau mengubah file ini
 * kecuali license ini tidak dirubah atau dihapus
 *
 * MARI BERKREASI
 */
package Maaz;

import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Maaz
 */
public class Query {

    private Statement stmt = null;
    private static Connection conn;
    private boolean bool = false;
    ResultSet rs = null;

    public Query() {
    }

    private void connect() throws SQLException {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            String url = "jdbc:mysql://localhost:3306/Bank";
            String user = "root";
            String pwd = "";
            conn = DriverManager.getConnection(url, user, pwd);
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(Query.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public boolean insertPegawai(String id_peg, String nama, String jabatan, String kantor_cab, String alamat) {
        try {
            connect();
            stmt = conn.createStatement();
            String sql = "INSER INTO pegawai values(" + id_peg + "'" + "," + "'" + nama + "'" + "," +
                    "'" + jabatan + "'" + "," + "'" + kantor_cab + "'" + "," + "'" + alamat + ")";
            bool = stmt.execute(sql);
        } catch (SQLException ex) {
            System.out.println("SQLExceptio : " + ex.getMessage());
        }
        return bool;
    }

    public ResultSet selectPegawai() throws SQLException {
        connect();
        try {
            stmt = conn.createStatement();
            String sql = "SELECT * from pegawai";
            rs = stmt.executeQuery(sql);
        } catch (SQLException e) {
            System.out.println("SQLExceptio : " + e.getMessage());
        }

        return rs;
    }
}

Catatan : Saya mempunyai database dengan nama Bank dan table pegawai.

Selanjutnya buat new class dengan JFrame Form seperti dibawah ini:

Untuk penamaannya jika swing controll berupa textfield, namanya ditamabakan awal ”text” (contoh textfield nam = textNama), agar mudah dingat. Sedangkan berupa button awal ”btn” dan tabel dgn nama tabelpegawai. (Anda bisa merubah sesuai kebutuhan).

Kemudian buat method tablemodel

private DefaultTableModel tableModel(String[] colNames, ResultSet rs) throws SQLException {
        int row = 0;
        while (rs.next()) {
            row = rs.getRow();
        }
        rs.beforeFirst();
        String[][] data = new String[row][colNames.length];
        for (int i = 0; i < row; i++) {
            rs.next();
            for (int j = 0; j < colNames.length; j++) {
                data[i][j] = rs.getString(j + 1);
            }
        }
        return new DefaultTableModel(data, colNames);
    }

Selanjutnya berikan event pada btnConnect

private void btnConnectActionPerformed(java.awt.event.ActionEvent evt) {
   try {
      /*
      * membuat koneksi ke database
      */
      DBQ = new Query();
      Resultset rs = DBQ.selectPegawai();
      tablePegawai.setModel(tableModel(new String[]("ID", "Nama", "Jabatan",
      "Kantor","Alamat"), rs));
      } catch (SQLException ex) {
      Logger.getLogger(Antarmuka.class.getName()).log(Level.SEVERE, null, ex);
      }
}

event pada btnInsert

private void btnInsertActionPerformed(java.awt.event.ActionEvent evt) {
   DBQ.insertPegawai(textId.getText(),textNama.getText(),textJabatan.getText(),
   textKantor.getText(),textAlamat.getText());
   try {
      Resultset rs = DBQ.insertPegawai();
      tablePegawai.setModel(tableModel(new String[]("ID", "Nama", "Jabatan",
      "Kantor","Alamat"), rs));
      } catch (SQLException ex) {
      Logger.getLogger(Antarmuka.class.getName()).log(Level.SEVERE, null, ex);
      }
}

Setelah selesai semuanya run file à tekan btnConnect, anda bisa mencoba memasukkan data…

  1. Maaz
    May 4, 2009 at 10:11 am | #1

    Mana si Bram ini..

  2. June 10, 2009 at 5:42 am | #2

    thank’s sob atas petunjuknya…

  3. anggi
    June 10, 2009 at 5:57 am | #3

    masih membingungkan..
    default table modelnya di taruh di mana?..
    tolong kasih tau..
    maklum saya baru pemulaa..

    • Maaz
      June 10, 2009 at 6:13 am | #4

      Kan kamu buat JFrame di NetBeans sebelumnya, yang bakal jadi tampilannya seperti gambar yang ada dia atas.
      coba kamu lihat di bagian source pada JFrame yang kamu buat, trus ada konstruktornya :
      singkatnya yang ada public [diikuti nama file kamu] di dalamnya tinggal kamu setModel tabel kamu tersebut..

  4. yuzz
    June 25, 2009 at 9:02 am | #5

    Itu kan frame nya satu yah… klo yg saya buat, 2 frame… jadi ada frame buat ngisi2 id pegawai dsb.. trs ada frame yg khusus buat nampilin JTablenya….begitu saya insert d frame buat ngisi2nya…tp d frame yg khusus nampilin JTablenya ga ke-update…saya menggunakan JInternalframe….
    Terimakasih atas bantuannya…..

    • Maaz
      June 30, 2009 at 11:43 am | #6

      Sama aja, di JFrame maupun JInternalFrame.

  5. March 30, 2010 at 6:21 am | #7

    String sql = “INSER INTO pegawai values(” + id_peg + “‘” + “,” + “‘” + nama + “‘” + “,” +
    “‘” + jabatan + “‘” + “,” + “‘” + kantor_cab + “‘” + “,” + “‘” + alamat + “)”;

    kok panjang banget coba deh ada yang error ngak !!!
    koreksi :
    String sql = “INSER INTO pegawai values(‘” + id_peg + “‘,’” + nama + “‘,’” + jabatan + “‘,’” + kantor_cab + “‘,’” + alamat + “‘)”;

    gimana lebih pendek to :D

    • April 5, 2010 at 5:00 am | #8

      @mbahsomo, ya memang cara penulisan yang saya lakukan lebih panjang,

      ya terimakasih atas koreksinya.

  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.