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 :

menggunakan WIndows. Langsung saja masuk ke MySQL console : 2. Kemudian setelah masuk ke MySQLnya, mulai

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

. Untuk lebih mudahnya perhatikan gambar berikut : Kita membuat database yang bernama mahasiswa. Kemudian kita

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 :

New Project. Lalu akan dibawa ke tampilan seperti ini : Pilih saja Java Application, kemudian Next.

Pilih saja Java Application, kemudian Next.

4. Kemudian isikan informasi seperti berikut :

Pilih saja Java Application, kemudian Next. 4. Kemudian isikan informasi seperti berikut : http://tanahdjawa.wordpress.com

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.

Anda akan menjumpai struktur project yang telah dibuat tadi. 6. Pembuatan project dimulai dengan membuat user

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.

pada package aplikasidatabase, pilih New dan kemudian pilih package. Kemudian Finish. http://tanahdjawa.wordpress.com

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.

Form. Kemudian akan tampil seperti berikut. Berikan nama yaitu Frame. Klik Finish. http://tanahdjawa.wordpress.com

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.

Tinggal drag and drop saja dari palette di sebelah kanan. 9. Kemudian masukkan beberapa komponen. Supaya

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

membuat 2 panel di JFrame tersebut, kemudian setLayout JFramenya menjadi border layout. http://tanahdjawa.wordpress.com

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.

untuk komponen inputnya, dan komponen bawah untuk JTablenya. 10. Sekarang buatlah tampilan JFrame menjadi seperti gambar

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

di bawah. Untuk panel bawah setLayoutnya juga border layout agar Jtable menyesuaikan. http://tanahdjawa.wordpress.com

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 :

Name. Berikut nama-nama komponen yang telah dibuat : Untuk bagian pertama cukup seperti ini dulu. Pada

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.

penjelasannya bisa dilihat pada pembuatan kelasnya nanti. Buatlah menjadi seperti gambar di atas. 2. Kemudian masuk

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.

klik kanan saja pada source editornya, pilih Insert Code. Lalu pilih Getter and Setter http://tanahdjawa.wordpress.com

Lalu pilih Getter and Setter

klik kanan saja pada source editornya, pilih Insert Code. Lalu pilih Getter and Setter http://tanahdjawa.wordpress.com

http://tanahdjawa.wordpress.com

dimas.agil.67@gmail.com

Pilih semua variable yang ada, kemudian Generate.

Pilih semua variable yang ada, kemudian Generate. Berikut keseluruhan sourcenya : package

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.

terlihat warning di sebelah kiri, klik saja dan pilih Implements all abstract method. http://tanahdjawa.wordpress.com

http://tanahdjawa.wordpress.com

dimas.agil.67@gmail.com

Kemudian kode akan tergenerate seperti ini :

Kemudian kode akan tergenerate seperti ini : Sekarang buat variable baru. private

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 del ete (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 :

posisinya selalu di tengah. Sekarang coba di-run(Shift+F6) maka akan tampil seperti ini : http://tanahdjawa.wordpress.com

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.

klik kanan pada Libraries, kemudian pilih Add Library. 5. Kemudian pilih MySQL JDBC Driver lalu klik

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

5. Kemudian pilih MySQL JDBC Driver lalu klik Add Library. Dengan begitu kita sudah membawa kelas

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 sebagai databasenya, seperti

lokasi driver JDBC tersebut. Karena menggunakan MySQL 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 piilih Events>Action>actionPerformed Kemudian berikan method insert(), update, dan delete() pada

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() + tNim.getText() + "'";

"'

where

nim

=

'"

+

result = statement.executeUpdate(sql);

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

refresh();

clearForm();

}

} catch (SQLException ex) {

JOptionPane.showMessageDialog(null,

JOptionPane.ERROR_MESSAGE);

}

}

Penjelasan :

ex,

"Error",

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

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

+

sql

=

"update

data_mahasiswa

set

nama

=

'"

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 :

JTable, yaitu mouseClicked. Perhatikan gambar di bawah : Kemudian tambahkan method aksiTabel(). Berikut kode dari

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, "Error", JOptionPane.ERROR_MESSAGE);

}

}

Penjelasan :

ex,

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.

kode pada kelas Main yang berfungsi sebagai method main. public static void main (String[] args) {

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,

catch (IllegalAccessException ex) {

ex,

"Error",

}

JOptionPane.ERROR_MESSAGE);

 

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.

setVisible(true). Sekarang untuk menjalankannya tekan saja F6 atau tanda seperti gambar. http://tanahdjawa.wordpress.com

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 :

yang error. Setelah dijalankan maka hasilnya seperti ini : Seperti itulah hasil akhir dari project AplikasiDatabase.

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,

Short.MAX_VALUE))

.addContainerGap())

);

jPanel2Layout.setVerticalGroup(

javax.swing.GroupLayout.DEFAULT_SIZE,

308,

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

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

statement.executeUpdate(sql);

"

+

"('"

+

tNim.getText()

+

"','"

+

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

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

"

+

tNim.getText()

+

"

?",

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