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…

Mana si Bram ini..
thank’s sob atas petunjuknya…
masih membingungkan..
default table modelnya di taruh di mana?..
tolong kasih tau..
maklum saya baru pemulaa..
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..
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…..
Sama aja, di JFrame maupun JInternalFrame.
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
@mbahsomo, ya memang cara penulisan yang saya lakukan lebih panjang,
ya terimakasih atas koreksinya.