Anda di halaman 1dari 43

dimas.agil.67@gmail.

com

Pada tutorial kali ini, saya akan menjelaskan bagaimana membuat aplikasi database menggunakan
Java sebagai bahasa pemrogramannya, dan MySQL sebagai aplikasi databasenya. Kedua program ini
mampu bekerjasama dan menghasilkan suatu program baru yang dapat berinteraksi dengan baik.
Saya di sini hanya akan menjelaskan sebuah dasar dalam pembuatan aplikasi database, yaitu adanya
proses insert, update, dan delete data. Tabel yang digunakan juga hanya 1 tabel, itu pun hanya berisi
3 field data. Ya, aplikasi database yang cukup sederhana. Namun dengan adanya tutorial ini saya
berharap dapat digunakan sebagai acuan dalam membuat sebuah aplikasi yang cukup kompleks.

http://tanahdjawa.wordpress.com
dimas.agil.67@gmail.com

PART I

1. Langkah pertama adalah pembuatan database yang akan digunakan dalam menyimpan data. Di
sini saya menggunakan Wamp Server untuk aplikasi databasenya karena saya menggunakan
WIndows. Langsung saja masuk ke MySQL console :

2. Kemudian setelah masuk ke MySQLnya, mulai membuat databasenya . Untuk lebih mudahnya
perhatikan gambar berikut :

Kita membuat database yang bernama mahasiswa. Kemudian kita membuat table
data_mahasiswa yang berisi field-field nim, nama, dan alamat. Not null berarti tidak boleh
kosong, sedangkan primary key adalah kunci utama dalam sebuah table yang unik.

http://tanahdjawa.wordpress.com
dimas.agil.67@gmail.com

3. Pembuatan database telah selesai, kemudian buat projectnya di NetBeans 6.8. Caranya klik File >
New Project. Lalu akan dibawa ke tampilan seperti ini :

Pilih saja Java Application, kemudian Next.

4. Kemudian isikan informasi seperti berikut :

http://tanahdjawa.wordpress.com
dimas.agil.67@gmail.com

Untuk nama projectnya yaitu AplikasiDatabase, kemudian untuk Project Location bisa
disesuaikan sendiri direktorinya. Kemudian Finish.

5. Setelah selesai, Anda akan menjumpai struktur project yang telah dibuat tadi.

6. Pembuatan project dimulai dengan membuat user interfacenya. Bikin saja package baru dengan
nama aplikasidatabase.frame. Caranya klik kanan pada package aplikasidatabase, pilih New dan
kemudian pilih package. Kemudian Finish.

http://tanahdjawa.wordpress.com
dimas.agil.67@gmail.com

7. Sekarang klik kanan lagi pada package aplikasidatabase.frame, pilih New>JFrame Form.
Kemudian akan tampil seperti berikut. Berikan nama yaitu Frame. Klik Finish.

http://tanahdjawa.wordpress.com
dimas.agil.67@gmail.com

8. Setelah itu akan tampil seperti berikut. Itu merupakan tampilan awal dari pembuatan JFrame.
Sekarang bisa ditambahkan komponen-komponen yang diperlukan. Tinggal drag and drop saja
dari palette di sebelah kanan.

9. Kemudian masukkan beberapa komponen. Supaya mudah, saya membuat 2 panel di JFrame
tersebut, kemudian setLayout JFramenya menjadi border layout.

http://tanahdjawa.wordpress.com
dimas.agil.67@gmail.com

Sekarang bisa dilihat tampilan panel yang telah dibuat. Panel atas untuk komponen inputnya,
dan komponen bawah untuk JTablenya.

10. Sekarang buatlah tampilan JFrame menjadi seperti gambar di bawah. Untuk panel bawah
setLayoutnya juga border layout agar Jtable menyesuaikan.

http://tanahdjawa.wordpress.com
dimas.agil.67@gmail.com

Agar lebih mudah dalam membuatnya nanti, ganti dulu nama variable pada masing masing
komponen. Caranya klik kanan pada komponen tersebut, kemudian pilih Change Variable Name.
Berikut nama-nama komponen yang telah dibuat :

Untuk bagian pertama cukup seperti ini dulu. Pada bagian kedua kita akan membuat TableModel
untuk tabelMahasiswa.

http://tanahdjawa.wordpress.com
dimas.agil.67@gmail.com

PART II

1. Buat lagi package baru dengan nama aplikasidatabase.tabel. Dalam package ini akan ada 2 kelas,
yaitu kelas untuk membuat entitas dan kelas untuk TabelModelnya. Untuk penjelasannya bisa
dilihat pada pembuatan kelasnya nanti.

Buatlah menjadi seperti gambar di atas.

2. Kemudian masuk ke kelas Mahasiswa. Kelas Mahasiswa adalah kelas yang hanya akan
menampung nilai-nilai yang akan dimasukkan kedalam table. Jadi hanya berisi method setter()
dan getter() saja. Tambahkan beberapa variable pada kelas Mahasiswa.

private String nim, nama, alamat;

http://tanahdjawa.wordpress.com
dimas.agil.67@gmail.com

Kemudian agar lebih mudah, klik kanan saja pada source editornya, pilih Insert Code.

Lalu pilih Getter and Setter

http://tanahdjawa.wordpress.com
dimas.agil.67@gmail.com

Pilih semua variable yang ada, kemudian Generate.

Berikut keseluruhan sourcenya :

package aplikasidatabase.tabel;

/**
*
* @author dimas
*/
public class Mahasiswa {

private String nim, nama, alamat;

public String getAlamat() {


return alamat;
}

http://tanahdjawa.wordpress.com
dimas.agil.67@gmail.com

public void setAlamat(String alamat) {


this.alamat = alamat;
}

public String getNama() {


return nama;
}

public void setNama(String nama) {


this.nama = nama;
}

public String getNim() {


return nim;
}

public void setNim(String nim) {


this.nim = nim;
}

3. Sekarang masuk ke kelas TabelModelMahasiswa. TabelModel adalah kelas yang digunakan


untuk membuat model sebuah JTable. Kenapa harus dibuatkan model? Karena JTable yang ada
di Java defaultModelnya kurang interaktif. Artinya ketika ada penambahan atau penghapusan
data table tersebut tidak bisa menyesuaikan jumlah baris yang ada. Dengan TabelModel kita bisa
mengatasi hal tersebut.

4. Tambahkan kode seperti berikut pada nama kelasnya :

public class TabelModelMahasiswa extends AbstractTableModel{

Kemudian akan terlihat warning di sebelah kiri, klik saja dan pilih Implements all abstract
method.

http://tanahdjawa.wordpress.com
dimas.agil.67@gmail.com

Kemudian kode akan tergenerate seperti ini :

Sekarang buat variable baru.

private List<Mahasiswa> list = new ArrayList<Mahasiswa>();

Itu berarti kita membuat variable list dari interface List. Kemudian dari List tersebut diinclude-
kan kelas Mahasiswa yang telah dibuat tadi sebagai penampung nilai dari variable list. Kemudian
dia juga memanggil constructor dari kelas ArrayList<E>. Kelas ini mampu memanipulasi ukuran
dari array yang digunakan untuk menampung nilai-nilai array dari variable list tadi.

5. Sekarang tambahkan kode pada method getRowCount(). Method ini digunakan untuk
menghitung jumlah baris pada suatu tabel.

return list.size();

Method ini mengembalikan nilai dari element list. Jadi akan dapat menyesuaikan jumlah dari
baris yang ada.

6. Tambahkan kode pada method getColumnCount(). Method ini digunakan untuk menghitung
jumah kolom yang ada pada table. Karena kita tadi telah membuat 3 variabel, yaitu nim, nama,
dan alamat, maka jumlah kolomnya juga 3. Tambahkan seperti ini.

return 3;

http://tanahdjawa.wordpress.com
dimas.agil.67@gmail.com

7. Tambahkan juga pada getValueAt(int rowIndex, int columnIndex). Method ini digunakan untuk
mengambil nilai yang ada pada sebuah table. Pertama dia menentukan baris keberapa dan
kolom ke berapa yang akan diambil. Untuk kolom pertama, dia akan mengembalikan nilai dari
baris yang sesuai, dan mengambil nilai dari method getter yaitu getNim(). Begitu juga dengan
kolom-kolom berikutnya.

public Object getValueAt(int rowIndex, int columnIndex) {


switch(columnIndex){
case 0 : return list.get(rowIndex).getNim();
case 1 : return list.get(rowIndex).getNama();
case 2 : return list.get(rowIndex).getAlamat();
default: return null;
}
}

8. Kemudian override method getColumnName(int column) di bawah method getValueAt(int


rowIndex, int columnIndex). Ini digunakan untuk mengganti nama dari TableHeader.
Penjelasannya sama, untuk kolom pertama dia diganti dengan NIM, dan kolom-kolom
berikutnya menyesuaikan dengan kode.

@Override
public String getColumnName(int column) {
switch(column){
case 0 : return "NIM";
case 1 : return "NAMA";
case 2 : return "ALAMAT";
default: return null;
}

9. Tambahkan method untuk menambah baris pada table. Method ini membawa parameter dari
kelas mahasiswa, dan menyimpannya di variable mahasiswa. Kemudian dia dimasukkan ke
variable list. Yang terakhir adalah menambah baris pada table.

public void add(Mahasiswa mahasiswa){


list.add(mahasiswa);
fireTableRowsInserted(getRowCount(),getColumnCount());
}

http://tanahdjawa.wordpress.com
dimas.agil.67@gmail.com

10. Tambahkan method untuk menghapus baris. Dia membawa nilai berupa integer, yaitu nilai dari
baris pertama dan baris terakhir pada table. Maka keseluruhan baris akan terhapus.

public void delete(int i, int row){


list.remove(i);
fireTableRowsDeleted(i, row);
}

11. Tambahkan method untuk mengambil nilai dari baris.

public Mahasiswa get(int row){


return (Mahasiswa) list.get(row);
}

Untuk kelas TabelModelMahasiswa sudah selesai, berikut kode program secara keseluruhan :

package aplikasidatabase.tabel;

import java.util.ArrayList;

import java.util.List;

import javax.swing.table.AbstractTableModel;

/**

* @author dimas

*/

public class TabelModelMahasiswa extends AbstractTableModel{

private List<Mahasiswa> list = new ArrayList<Mahasiswa>();

public void add(Mahasiswa mahasiswa){

list.add(mahasiswa);

fireTableRowsInserted(getRowCount(), getColumnCount());

http://tanahdjawa.wordpress.com
dimas.agil.67@gmail.com

public void delete(int i, int row){

list.remove(i);

fireTableRowsDeleted(i, row);

public Mahasiswa get(int row){

return (Mahasiswa) list.get(row);

public int getRowCount() {

return list.size();

public int getColumnCount() {

return 3;

public Object getValueAt(int rowIndex, int columnIndex) {

switch(columnIndex){

case 0 : return list.get(rowIndex).getNim();

case 1 : return list.get(rowIndex).getNama();

case 2 : return list.get(rowIndex).getAlamat();

default: return null;

http://tanahdjawa.wordpress.com
dimas.agil.67@gmail.com

@Override

public String getColumnName(int column) {

switch(column){

case 0 : return "NIM";

case 1 : return "NAMA";

case 2 : return "ALAMAT";

default: return null;

http://tanahdjawa.wordpress.com
dimas.agil.67@gmail.com

PART III

Pada bagian ke-3 ini kita akan menyelesaikan keseluruhan program Aplikasi Database.

1. Sekarang masuk pada kelas Frame tadi, dan masuk pada bagian source-nya.Tambahkan method
initForm() di bawah method initComponents(). Setelah itu pasti ada warning lagi. Klik saja dan
pilih create method initForm() in aplikasidatabase.frame.Frame.

2. Buat variable dari kelas TabelModelaMahasiswa :

private TabelModelMahasiswa modelMahasiswa;

3. Kemudian pada method initForm, tambahkan kode seperti ini :

modelMahasiswa = new TabelModelMahasiswa();

tabelMahasiswa.setModel(modelMahasiswa);

setLocationRelativeTo(this);

Pertama kita menginisialisasi variable modelMahasiswa. Kemudian tabelMahasiswa-nya diganti


dengan modelMahasiswa yang merupakan variable dari kelas TabelModelMahasiswa yang telah
dibuat tadi. SetLocationRelativeTo(this) digunakan agar posisinya selalu di tengah. Sekarang
coba di-run(Shift+F6) maka akan tampil seperti ini :

http://tanahdjawa.wordpress.com
dimas.agil.67@gmail.com

4. Langkah berikutnya adalah melakukan koneksi ke MySQL. Pertama harus diincludekan library
dari MySQL ke dalam project. Caranya klik kanan pada Libraries, kemudian pilih Add Library.

5. Kemudian pilih MySQL JDBC Driver lalu klik Add Library.

Dengan begitu kita sudah membawa kelas yang berisi Driver untuk koneksi ke MySQL.

http://tanahdjawa.wordpress.com
dimas.agil.67@gmail.com

6. Sekarang buat variable dari Connection dan Statement :

private Connection connection;

private Statement statement;

7. Buat method openDB seperti berikut :

private void openDB() {

try {

Class.forName("com.mysql.jdbc.Driver");

Connection =
DriverManager.getConnection("jdbc:mysql://localhost/

mahasiswa", "root", "");

statement = connection.createStatement();

} catch (SQLException ex) {


JOptionPane.showMessageDialog(null, ex, "Error",
JOptionPane.ERROR_MESSAGE);

} catch (ClassNotFoundException ex) {


JOptionPane.showMessageDialog(null, ex, "Error",
JOptionPane.ERROR_MESSAGE);

Berikut sedikit penjelasan mengenai kode di atas :

Class.forName("com.mysql.jdbc.Driver");

Digunakan untuk menentukan lokasi driver JDBC tersebut. Karena menggunakan MySQL
sebagai databasenya, seperti itulah nama kelasnya.

Connection = DriverManager.getConnection
("jdbc:mysql://localhost/mahasiswa", "root", "");

Melakukan koneksi ke MySQLnya dengan url seperti di atas. Localhost merupakan database
hostnya, mahasiswa merupakan nama database yang telah dibuat tadi, sedangkan root
adalah nama pengguna dari MySQL. String kosong di situ adalah password untuk masuk
sebagai user root, tapi karena tidak diberi password, maka kosongkan saja/ sesuaikan.

http://tanahdjawa.wordpress.com
dimas.agil.67@gmail.com

statement = connection.createStatement();

Statement adalah variable dari kelas Statement yang digunakan untuk mengeksekusi query-
query sql di dalam Java.

9. Langkah berikutnya adalah memberi aksi pada ke tiga JButton tersebut. Caranya klik kanan pada
bInsert, kemudian piilih Events>Action>actionPerformed

Kemudian berikan method insert(), update, dan delete() pada masing-masing JButton yang
sesuai.

10. Sekarang kita mulai dengan membuat method INSERT. Ketikkan kode seperti ini di bawah
method openDB();

private void insert() {

try {

String sql = "insert into data_mahasiswa values " +


"('" + tNim.getText() + "','" + tNama.getText() +
"','" + tAlamat.getText() + "')";

statement.executeUpdate(sql);

JOptionPane.showMessageDialog(null, "Data berhasil


disimpan");

refresh();

http://tanahdjawa.wordpress.com
dimas.agil.67@gmail.com

clearForm();

} catch (SQLException ex) {

JOptionPane.showMessageDialog(null, ex, "Error",


JOptionPane.ERROR_MESSAGE);

Penjelasan :

String sql = "insert into data_mahasiswa values " + "('" +


tNim.getText() + "','" + tNama.getText() + "','" +
tAlamat.getText() + "')";

Untuk menginputkan data ke MySQL. Query yang digunakan adalah insert into yang mana nilai
dari variabelnya diambilkan dari masing-masing JTextField. Karena ketika membuat tadi struktur
tabelnya adalah nim, nama, baru alamat, maka di sini yang diinputkan juga harus sesuai.

statement.executeUpdate(sql);

Merupakan kode untuk mengeksekusi perintah sql di mana sql tadi telah berisi query insert
dalam MySQL.

refresh();

Method ini akan dijelaskan sendiri nanti.

clearForm();

Untuk membersihkan JTextField. Ini juga akan dibahas nanti.

Kemudian JOptionPane merupakan kelas untuk menampilkan beberapa informasi yang layak
untuk ditampilkan. Di situ jika tidak ada kesalahan, maka akan menampilkan “Data berhasil
disimpan”, namun jika salah akan menampilkan pesan errornya.

11. Tambahkan kode pada method update().

private void update() {

try {

int app, result;

if ((app = JOptionPane.showConfirmDialog(null, "Ubah


data " + tNim.getText() + " ?", "Perhatian",
JOptionPane.YES_NO_OPTION)) == 0) {

String sql = "update data_mahasiswa set nama = '" +


tNama.getText() + "', alamat = '" +

http://tanahdjawa.wordpress.com
dimas.agil.67@gmail.com

tAlamat.getText() + "' where nim = '" +


tNim.getText() + "'";

result = statement.executeUpdate(sql);

JOptionPane.showMessageDialog(null, "Data berhasil


diubah");

refresh();

clearForm();

} catch (SQLException ex) {

JOptionPane.showMessageDialog(null, ex, "Error",


JOptionPane.ERROR_MESSAGE);

Penjelasan :

if ((app = JOptionPane.showConfirmDialog(null, "Ubah data " +


tNim.getText() + " ?", "Perhatian", JOptionPane.YES_NO_OPTION))
== 0) {

Digunakan untuk menampilkan konfirmasi dialog untuk meyakinkan apakah data tersebut akan
diubah.

String sql = "update data_mahasiswa set nama = '" +


tNama.getText() + "', alamat = '" + tAlamat.getText() + "' where
nim = '" + tNim.getText() + "'";

Query dari MySQL untuk mengupdate data. Di sini yang menjadi patokan adalah nim, maka nim
tidak diubah.

result = statement.executeUpdate(sql);

Untuk mengeksekusi query dari String sql tadi yang berisi query update. Agar mengetahui
apakah data berhasil diubah atau tidak, bisa digunakan JoptionPane lagi, dan ketika error
tampilkan juga pesan errornya untuk mengetahui letak kesalahannya.

http://tanahdjawa.wordpress.com
dimas.agil.67@gmail.com

12. Tambahkan kode pada method delete().

private void delete() {

try {

int app, result;

if ((app = JOptionPane.showConfirmDialog(null,
"Hapus data " + tNim.getText() + " ?", "Perhatian",
JOptionPane.YES_NO_OPTION)) == 0) {

String sql = "delete from data_mahasiswa where nim =


'" + tNim.getText() + "'";

result = statement.executeUpdate(sql);

JOptionPane.showMessageDialog(null, "Data berhasil


dihapus");

refresh();

clearForm();

} catch (SQLException ex) {

JOptionPane.showMessageDialog(null, ex, "Error",


JOptionPane.ERROR_MESSAGE);

Penjelasan :

Hampir sama seperti kode-kode sebelumnya, di sini hanya akan saya jelaskan query delete.

String sql = "delete from data_mahasiswa where nim = '" +


tNim.getText() + "'";

Kode di atas merupakan sintak untuk menghapus data pada suatu tabel. Sekali lagi yang menjadi
patokan haruslah data yang unik/ tidak ada duanya. Karena jika ada data yang sama yang
menjadi acuan untuk menghapus/ mengubah, maka database tersebut akan kacau.

http://tanahdjawa.wordpress.com
dimas.agil.67@gmail.com

13. Langkah berikutnya adalah memberikan aksi pada JTable. Hal ini digunakan untuk keperluan 3
anomali data di atas. Jadi ketika sebuah data akan dihapus/ diubah, sudah pasti hal yang akan
dilakukan adalah memilih datanya. Karena penyimpanan datanya menggunakan JTable, maka
akan lebih baik jika memilih data langsung pada JTable. Tambahkan aksi pada JTable, yaitu
mouseClicked. Perhatikan gambar di bawah :

Kemudian tambahkan method aksiTabel(). Berikut kode dari method aksiTabel().


private void aksiTabel() {
tNim.setEditable(false);

tabelMahasiswa.getSelectionModel().addListSelectionListen
er(new ListSelectionListener() {

public void valueChanged(ListSelectionEvent e) {


int baris = tabelMahasiswa.getSelectedRow();
if (baris != -1) {
Mahasiswa anggota = modelMahasiswa.get(baris);
tNim.setText(anggota.getNim());
tNama.setText(anggota.getNama());
tAlamat.setText(anggota.getAlamat());
}
}
});
}

Penjelasan :
tNim.setEditable(false);
Seperti yang telah saya ungkapkan di atas, kita memerlukan acuan untuk melakukan anomali
terhadap data. Yang digunakan sebagai acuan di sini adalah NIM, maka ketika akan diubah/
dihapus, NIM tersebut tidak boleh diubah karena digunakan sebagai acuan.

http://tanahdjawa.wordpress.com
dimas.agil.67@gmail.com

tabelMahasiswa.getSelectionModel().addListSelectionListener
(new ListSelectionListener() {

Memberikan aksi pada tabelMahasiswa. Di sini dia menggunakan aksi ListSelectionListener


karena listener tersebut bisa mendeteksi pergantian List melalui arrow keyboard. Sebenarnya
pemberian mouseClicked pada JTable adalah salah, karena dia tidak bisa mendeteksi pergantian
nilai dari List melalui arrow. Tapi kenapa tetap saya berikan aksi mouseClicked? Itu digunakan
untuk men-setEditable pada tNim. Jadi ketika JTable diklik, tNimnya tidak bisa diubah. Kemudian
setelah itu baru mempergunakan ListSelectionListener. Sekarang coba tanpa mempergunakan
aksi mouseClicked, jadi method ini dipanggil saat program dijalankan. Anda pasti akan melihat
masalahnya.

public void valueChanged(ListSelectionEvent e) {


int baris = tabelMahasiswa.getSelectedRow();
if (baris != -1) {
Mahasiswa anggota = modelMahasiswa.get(baris);
tNim.setText(anggota.getNim());
tNama.setText(anggota.getNama());
tAlamat.setText(anggota.getAlamat());
}
}
Int baris digunakan untuk menyimpan nilai yang didapat pada saat baris terseleksi. Kemudian
dicek, jika nilai baris!=-1, artinya ada baris yang terseleksi maka dia akan memanggil method get
yang telah dibuat pada kelas TabelModelMahasiswa. Kemudian pada masing-masing JTextField
diberi nilai yang sesuai dengan baris yang terseleksi dengan method setText(). Jadi method pada
aksiTabel() ini digunakan untuk menampilkan nilai yang ada pada baris dalam JTable ke
JTextField sesuai dengan baris yang terseleksi.

14. Buat method clearForm() seperti kode di bawah ini. Method ini digunakan untuk membersihkan
JTextField. Sebenarnya bisa dibuat tanpa method, namun karena ada beberapa method yang
melakukan hal tersebut, maka buat saja method ini. Jadi tinggal dipanggil kembali tanpa
menuliskan beberapa kode yang sama.
private void clearForm() {
tNim.setText("");
tNama.setText("");
tAlamat.setText("");
tNim.requestFocus();
}

15. Buat method refresh() seperti di bawah ini. Method ini sebenarnya hanya berfungsi untuk
menghapus tabel dan menampilkan data. Lalu di mana fungsi ini diletakkan? Seperti yang bisa
dilihat method ini diletakkan ketika user melakukan anomali data dan ketika pertama kali
program berjalan. Jadi supaya data yang ada pada tabelMahasiswa selalu sama dengan data
yang ada pada MySQL, maka data yang sudah ada dihapus semua, kemudian ditampilkan
kembali dengan memilih semua data yang ada pad MySQL.

http://tanahdjawa.wordpress.com
dimas.agil.67@gmail.com

private void refresh() {


try {
int row = tabelMahasiswa.getRowCount();
for (int i = 0; i < row; i++) {
modelMahasiswa.delete(0, row);
}
String sql = "select * from data_mahasiswa";
ResultSet rs = statement.executeQuery(sql);
while (rs.next()) {
Mahasiswa mahasiswa = new Mahasiswa();
mahasiswa.setNim(rs.getString(1));
mahasiswa.setNama(rs.getString(2));
mahasiswa.setAlamat(rs.getString(3));
modelMahasiswa.add(mahasiswa);
}
tNim.setEditable(true);
} catch (SQLException ex) {

JOptionPane.showMessageDialog(null, ex,
"Error", JOptionPane.ERROR_MESSAGE);

}
}

Penjelasan :

int row = tabelMahasiswa.getRowCount();


for (int i = 0; i < row; i++) {
modelMahasiswa.delete(0, row);
}

Variabel row berfungsi untuk menghitung semua jumlah baris yang ada pada
tabelMahasiwa. Yang disimpan hanyalah nilai terakhirnya saja. Kemudian dengan
perulangan, dia menghapus baris-baris yang ada pada JTable mulai dari baris 0 sampai baris
terakhir (nilai dari row)

String sql = "select * from data_mahasiswa";


ResultSet rs = statement.executeQuery(sql);

Melakukan query MySQL untuk menampilkan keseluruhan data yang ada pada tabel
data_mahasiswa. Kemudian dieksekusi dan disimpan nilai yang ada pada tabel
data_mahasiswa ke variabel rs

http://tanahdjawa.wordpress.com
dimas.agil.67@gmail.com

while (rs.next()) {
Mahasiswa mahasiswa = new Mahasiswa();
mahasiswa.setNim(rs.getString(1));
mahasiswa.setNama(rs.getString(2));
mahasiswa.setAlamat(rs.getString(3));
modelMahasiswa.add(mahasiswa);
}
tNim.setEditable(true);

Dengan perulangan dia akan menampilkan keseluruhan data yang ada. Parameter pada
while memiliki arti, selama masih ada data selanjutnya maka dia akan melakukan sintak yang
ada pada blok perulangan while. Nah pada blok while, dia akan memberikan nilai pada
JTable dengan membawa nilai dari tabel data_mahasiswa. Perintah getString() digunakan
untuk mengambil data pada kolom ke-n pada sebuah tabel pada MySQL. Bisa menggunakan
nilai int, atau nilai String. Untuk nilai String bisa langsung dipanggil nama field dalam tabel
MySQL, misalnya rs.getSting(“nim”), itu berati dia mengambil nilai dari field nim.

16. Sekarang tambahkan method openDB dan refresh pada method initForm, menjadi seperti ini :
private void initForm() {
modelMahasiswa = new TabelModelMahasiswa();
tabelMahasiswa.setModel(modelMahasiswa);
setLocationRelativeTo(this);
openDB();
refresh();
}
Sampai sini sebenarnya program sudah selesai. Tapi lebih baik jika kita menggunakan method
main untuk memanggil Frame yang telah kita buat tadi.

http://tanahdjawa.wordpress.com
dimas.agil.67@gmail.com

17. Tambahkan kode pada kelas Main yang berfungsi sebagai method main.

public static void main(String[] args) {


try {
// TODO code application logic here
UIManager.setLookAndFeel(UIManager.getSystemLookAndF
eelClassName());
new Frame().setVisible(true);
} catch (ClassNotFoundException ex) {

JOptionPane.showMessageDialog(null, ex, "Error",


JOptionPane.ERROR_MESSAGE);

} catch (InstantiationException ex) {


JOptionPane.showMessageDialog(null, ex, "Error",
JOptionPane.ERROR_MESSAGE);

} catch (IllegalAccessException ex) {

JOptionPane.showMessageDialog(null, ex, "Error",


JOptionPane.ERROR_MESSAGE);

} catch (UnsupportedLookAndFeelException ex) {

JOptionPane.showMessageDialog(null, ex, "Error",


JOptionPane.ERROR_MESSAGE);
}

Method UIManager berfungsi untuk merubah tampilan pada Frame, karena saya rasa
tampilan defaultnya java kurang menarik. Kemudian setelah itu dia memanggil kelas Frame
tadi dan menampilkannya dengan setVisible(true). Sekarang untuk menjalankannya tekan
saja F6 atau tanda seperti gambar.

http://tanahdjawa.wordpress.com
dimas.agil.67@gmail.com

Sekarang coba jalankan programnya. sebelumnya pastikan tidak ada yang error. Jika ada
perhatikan kembali pada kode-kode yang error. Setelah dijalankan maka hasilnya seperti ini :

Seperti itulah hasil akhir dari project AplikasiDatabase. Semoga tidak ada hal yang terlewatkan
dalam tutorial ini dan semoga berguna. Jika ada kesalahan dalam penjelasan, saya
membutuhkan kritik dan saran untuk memperbaiki kemampuan saya lagi.

http://tanahdjawa.wordpress.com
dimas.agil.67@gmail.com

package aplikasidatabase.frame;

import aplikasidatabase.tabel.Mahasiswa;

import aplikasidatabase.tabel.TabelModelMahasiswa;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import javax.swing.JOptionPane;

import javax.swing.event.ListSelectionEvent;

import javax.swing.event.ListSelectionListener;

/**

* @author dimas

*/

public class Frame extends javax.swing.JFrame {

/** Creates new form Frame */

private Connection connection;

private Statement statement;

private TabelModelMahasiswa modelMahasiswa;

public Frame() {

initComponents();

initForm();

http://tanahdjawa.wordpress.com
dimas.agil.67@gmail.com

/** This method is called from within the constructor to

* initialize the form.

* WARNING: Do NOT modify this code. The content of this method is

* always regenerated by the Form Editor.

*/

@SuppressWarnings("unchecked")

// <editor-fold defaultstate="collapsed" desc="Generated Code">

private void initComponents() {

jPanel1 = new javax.swing.JPanel();

jScrollPane1 = new javax.swing.JScrollPane();

tabelMahasiswa = new javax.swing.JTable();

jPanel2 = new javax.swing.JPanel();

jLabel1 = new javax.swing.JLabel();

jLabel2 = new javax.swing.JLabel();

jLabel3 = new javax.swing.JLabel();

tNim = new javax.swing.JTextField();

tNama = new javax.swing.JTextField();

tAlamat = new javax.swing.JTextField();

bInsert = new javax.swing.JButton();

bUpdate = new javax.swing.JButton();

bDelete = new javax.swing.JButton();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

setTitle("Aplikasi Database");

jPanel1.setLayout(new java.awt.BorderLayout());

http://tanahdjawa.wordpress.com
dimas.agil.67@gmail.com

tabelMahasiswa.setModel(new javax.swing.table.DefaultTableModel(

new Object [][] {

{null, null, null, null},

{null, null, null, null},

{null, null, null, null},

{null, null, null, null}

},

new String [] {

"Title 1", "Title 2", "Title 3", "Title 4"

));

tabelMahasiswa.addMouseListener(new java.awt.event.MouseAdapter() {

public void mouseClicked(java.awt.event.MouseEvent evt) {

tabelMahasiswaMouseClicked(evt);

});

jScrollPane1.setViewportView(tabelMahasiswa);

jPanel1.add(jScrollPane1, java.awt.BorderLayout.CENTER);

getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);

jLabel1.setText("NIM");

jLabel2.setText("NAMA");

jLabel3.setText("ALAMAT");

http://tanahdjawa.wordpress.com
dimas.agil.67@gmail.com

bInsert.setText("INSERT");

bInsert.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {

bInsertActionPerformed(evt);

});

bUpdate.setText("UPDATE");

bUpdate.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {

bUpdateActionPerformed(evt);

});

bDelete.setText("DELETE");

bDelete.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {

bDeleteActionPerformed(evt);

});

javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);

jPanel2.setLayout(jPanel2Layout);

jPanel2Layout.setHorizontalGroup(

jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(jPanel2Layout.createSequentialGroup()

.addContainerGap()

http://tanahdjawa.wordpress.com
dimas.agil.67@gmail.com

.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addComponent(jLabel2)

.addComponent(jLabel1)

.addComponent(jLabel3))

.addGap(32, 32, 32)

.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(jPanel2Layout.createSequentialGroup()

.addComponent(bInsert)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addComponent(bUpdate)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addComponent(bDelete))

.addComponent(tAlamat, javax.swing.GroupLayout.Alignment.TRAILING,
javax.swing.GroupLayout.DEFAULT_SIZE, 308, Short.MAX_VALUE)

.addComponent(tNim, javax.swing.GroupLayout.Alignment.TRAILING,
javax.swing.GroupLayout.DEFAULT_SIZE, 308, Short.MAX_VALUE)

.addComponent(tNama, javax.swing.GroupLayout.DEFAULT_SIZE, 308,


Short.MAX_VALUE))

.addContainerGap())

);

jPanel2Layout.setVerticalGroup(

jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(jPanel2Layout.createSequentialGroup()

.addContainerGap()

.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)

.addComponent(jLabel1)

http://tanahdjawa.wordpress.com
dimas.agil.67@gmail.com

.addComponent(tNim, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)

.addComponent(jLabel2)

.addComponent(tNama, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)

.addComponent(jLabel3)

.addComponent(tAlamat, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)

.addComponent(bInsert)

.addComponent(bUpdate)

.addComponent(bDelete))

.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))

);

getContentPane().add(jPanel2, java.awt.BorderLayout.PAGE_START);

pack();

}// </editor-fold>

http://tanahdjawa.wordpress.com
dimas.agil.67@gmail.com

private void bInsertActionPerformed(java.awt.event.ActionEvent evt) {

// TODO add your handling code here:

insert();

private void bUpdateActionPerformed(java.awt.event.ActionEvent evt) {

// TODO add your handling code here:

update();

private void tabelMahasiswaMouseClicked(java.awt.event.MouseEvent evt) {

// TODO add your handling code here:

aksiTabel();

private void bDeleteActionPerformed(java.awt.event.ActionEvent evt) {

// TODO add your handling code here:

delete();

/**

* @param args the command line arguments

*/

public static void main(String args[]) {

java.awt.EventQueue.invokeLater(new Runnable() {

http://tanahdjawa.wordpress.com
dimas.agil.67@gmail.com

public void run() {

new Frame().setVisible(true);

});

// Variables declaration - do not modify

private javax.swing.JButton bDelete;

private javax.swing.JButton bInsert;

private javax.swing.JButton bUpdate;

private javax.swing.JLabel jLabel1;

private javax.swing.JLabel jLabel2;

private javax.swing.JLabel jLabel3;

private javax.swing.JPanel jPanel1;

private javax.swing.JPanel jPanel2;

private javax.swing.JScrollPane jScrollPane1;

private javax.swing.JTextField tAlamat;

private javax.swing.JTextField tNama;

private javax.swing.JTextField tNim;

private javax.swing.JTable tabelMahasiswa;

// End of variables declaration

private void initForm() {

modelMahasiswa = new TabelModelMahasiswa();

tabelMahasiswa.setModel(modelMahasiswa);

setLocationRelativeTo(this);

openDB();

refresh();

http://tanahdjawa.wordpress.com
dimas.agil.67@gmail.com

private void openDB() {

try {

Class.forName("com.mysql.jdbc.Driver");

connection = DriverManager.getConnection("jdbc:mysql://localhost/mahasiswa", "root", "");

statement = connection.createStatement();

} catch (SQLException ex) {

JOptionPane.showMessageDialog(null, ex, "Error", JOptionPane.ERROR_MESSAGE);

} catch (ClassNotFoundException ex) {

JOptionPane.showMessageDialog(null, ex, "Error", JOptionPane.ERROR_MESSAGE);

private void insert() {

try {

String sql = "insert into data_mahasiswa values " + "('" + tNim.getText() + "','" +
tNama.getText() + "','" + tAlamat.getText() + "')";

statement.executeUpdate(sql);

JOptionPane.showMessageDialog(null, "Data berhasil disimpan");

refresh();

clearForm();

} catch (SQLException ex) {

JOptionPane.showMessageDialog(null, ex, "Error", JOptionPane.ERROR_MESSAGE);

private void update() {

try {

int app, result;

http://tanahdjawa.wordpress.com
dimas.agil.67@gmail.com

if ((app = JOptionPane.showConfirmDialog(null, "Ubah data " + tNim.getText() + " ?",


"Perhatian", JOptionPane.YES_NO_OPTION)) == 0) {

String sql = "update data_mahasiswa set nama = '" + tNama.getText() + "', alamat = '" +
tAlamat.getText() + "' where nim = '" + tNim.getText() + "'";

result = statement.executeUpdate(sql);

JOptionPane.showMessageDialog(null, "Data berhasil diubah");

refresh();

clearForm();

} catch (SQLException ex) {

JOptionPane.showMessageDialog(null, ex, "Error", JOptionPane.ERROR_MESSAGE);

private void delete() {

try {

int app, result;

if ((app = JOptionPane.showConfirmDialog(null, "Hapus data " + tNim.getText() + " ?",


"Perhatian", JOptionPane.YES_NO_OPTION)) == 0) {

String sql = "delete from data_mahasiswa where nim = '" + tNim.getText() + "'";

result = statement.executeUpdate(sql);

JOptionPane.showMessageDialog(null, "Data berhasil dihapus");

refresh();

clearForm();

} catch (SQLException ex) {

JOptionPane.showMessageDialog(null, ex, "Error", JOptionPane.ERROR_MESSAGE);

http://tanahdjawa.wordpress.com
dimas.agil.67@gmail.com

private void aksiTabel() {

tNim.setEditable(false);

tabelMahasiswa.getSelectionModel().addListSelectionListener(new ListSelectionListener() {

public void valueChanged(ListSelectionEvent e) {

int baris = tabelMahasiswa.getSelectedRow();

if (baris != -1) {

Mahasiswa anggota = modelMahasiswa.get(baris);

tNim.setText(anggota.getNim());

tNama.setText(anggota.getNama());

tAlamat.setText(anggota.getAlamat());

});

private void clearForm() {

tNim.setText("");

tNama.setText("");

tAlamat.setText("");

tNim.requestFocus();

private void refresh() {

http://tanahdjawa.wordpress.com
dimas.agil.67@gmail.com

try {

int row = tabelMahasiswa.getRowCount();

for (int i = 0; i < row; i++) {

modelMahasiswa.delete(0, row);

String sql = "select * from data_mahasiswa";

ResultSet rs = statement.executeQuery(sql);

while (rs.next()) {

Mahasiswa mahasiswa = new Mahasiswa();

mahasiswa.setNim(rs.getString(1));

mahasiswa.setNama(rs.getString(2));

mahasiswa.setAlamat(rs.getString(3));

modelMahasiswa.add(mahasiswa);

tNim.setEditable(true);

} catch (SQLException ex) {

JOptionPane.showMessageDialog(null, ex, "Error", JOptionPane.ERROR_MESSAGE);

http://tanahdjawa.wordpress.com

Anda mungkin juga menyukai