Pada Kesempatan kali ini, semarsoft akan berbagi tentang tutorial CRUD di Java menggunakan Software Netbeans, Seperti biasanya, kita belajarnya menggunakan studi kasus, kali ini kita akan membuat Software Presensi Sederhana menggunakan Database MySql.
Sebelum itu, kita siapkan dulu software pendukungnya
- Netbeans, untuk praktikum kali ini, semarsoft menggunakan versi 8.2, kalian boleh menggunakan versi yang lebih tinggi
- JDK versi 10
- Xampp, untuk layanan web server dan database server
- plugin rs2xml untuk mempermudah menampilkan database kedalam datagrid
- Browser
Pembuatan Database
- Pastikan software yang dibutuhkan sudah terinstall, seperti Netbeans IDE, XAMPP dan Browser
- Jalankan XAMPP kemudian aktifkan apache dan mysql sehingga muncul seperti tampilan di bawah ini
- Jika keduanya sudah aktif, buka browser kemudian ketikkan http://localhost/phpmyadmin/, pada menu
language/bahasa pilih English agar bahasa yang anda gunakan sama dengan yang ada di tutorial ini - Klik menu database, pada menu create database ketikkan LSP, Kemudian klik tombol create
Setelah anda menekan tombol create, akan ada nama database lsp_shobi di menu sebelah kiri
Jika anda ingin lebih mudah, silahkan mengcopy code query di bawah ini pada menu SQL di Phpmyadmin seperti tampilan di atas:CREATE DATABASE lsp_shobi;
- Langkah berikutnya membuat tabel dengan nama admin dengan struktur tabel sebagai berikut :
atau paste code query berikut ke dalam menu SQLCREATE TABLE `admin` ( `id` int(3) NOT NULL, `username` varchar(35) NOT NULL, `password` varchar(35) NOT NULL, `Nama` varchar(45) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
- Kemudian buat tabel dengan nama siswa dengan struktur tabel sebagai berikut :
Gunakan Query berikut agar mempercepat latihan kitaCREATE TABLE `siswa` ( `NIS` int(8) NOT NULL, `NamaSiswa` varchar(80) NOT NULL, `JK` enum('L','P') NOT NULL, `Kelas` varchar(20) NOT NULL, `Alamat` text NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
- Selanjutnya buat tabel dengan nama presensi dengan struktur tabel sebagai berikut :
Gunakan code Query berikut untuk mempermudahCREATE TABLE `presensi` ( `id` int(3) NOT NULL, `idAdmin` int(3) NOT NULL, `NIS` int(8) NOT NULL, `kehadiran` char(1) NOT NULL, `tgl` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `ket` varchar(40) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
- Yang terkahir buat tabel view dengan nama vpresensi, view ini digunakan agar lebih mudah pada saat menampilkan data kehadiran siswa
Kita dapat mengeksekusi Query berikut untuk menghasilkan tabel berdasarkan struktur diatasCREATE VIEW `vpresensi` AS select `presensi`.`id` AS `id`,`siswa`.`NIS` AS `NIS`,`siswa`.`NamaSiswa` AS `Nama Siswa`,`presensi`.`kehadiran` AS `Status Kehadiran`,`presensi`.`tgl` AS `tgl`,`presensi`.`ket` AS `ket`,`admin`.`Nama` AS `Penginput` from `presensi` join `siswa` on`presensi`.`NIS` = `siswa`.`NIS` join `admin` on`presensi`.`idAdmin` = `admin`.`id` ;
Sampai sini proses pembuatan databse sudah selesai, sehingga hasil akhir dari proses pembuatan database kita adalah seperti pada ERDigaram berikur ini,
langkah berikutnya adalah membuat project di Netbeans
Pembuatan Project di Netbeans
-
- Jalankan Netbeans yang sudah berhasil terinstall
- Buat Project baru, caranya
Flik File > New Project > Java > JavaApplication
Pada menu project isikan LSP_NAMA, usahakan tidak ada spasi, Hilangkan centang pada Create Main Class kemudian tekan finish, perhatikan gambar di bawah ini - Pada project yang bari saja anda buat, klik source package kemudian klik kanan pada default package > New > Java Package
- Kemudian isi package Namenya nya dengan nama “LSP”
- Pada menu libraries klik kanan > add library > MySQL JDBC Driver > Add Library
- Klik kanan lagi Pada menu libraries > ADD Jar > cari rs2xml.jar (download di sini)
- Pada package LSP klik kanan > New > Java Class kemudian beri nama classnya dengan nama koneksi, perhatikan gambar di bawah ini
- Kemudian ketik kode di bawah ini
package LSP; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.DefaultComboBoxModel; import javax.swing.JOptionPane; import net.proteanit.sql.DbUtils; /** * * @author semarsoft| RPL 2021 * */ public class koneksi { private Connection connection; private Statement statement; private ResultSet resultSet; public Integer id; public Integer getIdAdmin() { return id; } public void setIdAdmin(Integer id) { this.id = id; } public Connection getConnection() { return connection; } public void getCon() { try { String urlDatabase = "jdbc:mysql://localhost/lsp"; //alamat database String user = "root"; //user yang dipakai utk akses database String password = ""; //password yang digunakan utk akses database connection = DriverManager.getConnection(urlDatabase, user, password); } catch (SQLException ex) { JOptionPane.showMessageDialog(null, "Koneksi Gagal! " + ex.getMessage()); } } public void Eksekusi(String Query, String Pesan){ try { statement=connection.createStatement(); statement.execute(Query); statement.close(); JOptionPane.showMessageDialog(null, Pesan); } catch (SQLException ex) { Logger.getLogger(koneksi.class.getName()).log(Level.SEVERE, null, ex); } } public void tampil(javax.swing.JTable table, String Query) { try { statement = connection.createStatement(); resultSet = statement.executeQuery(Query); table.setModel(DbUtils.resultSetToTableModel(resultSet)); statement.close(); resultSet.close(); } catch (SQLException ex) { JOptionPane.showMessageDialog(null, ex); } } public void combo(String Query, String ID,String Nama, javax.swing.JComboBox cb) { try { String showDataQuery = Query; statement = connection.createStatement(); resultSet = statement.executeQuery(showDataQuery); while (resultSet.next()) { cb.addItem(resultSet.getString(ID) + "-" + resultSet.getString(Nama)); } statement.close(); resultSet.close(); } catch (SQLException ex) { JOptionPane.showMessageDialog(null, "Gagal Menampilkan di combobox " + ex.getMessage()); } } }
Membuat Form Login
- Pada Package LSP buatlah JFrame Form Login, klik Kanan Package LSP > New > JFrame Form > ketikkan
class name dengan nama Login
- Buatlah tampilan seperti gambar di bawah ini,
Dengan property, komponen dan nama variable seperti gambar di bawah iniNama Variabel Komponen di Form Login - Klik JPanel1 Kemudian lihat menu property di sebelah kanan centang menu undecorated , sesuaikan dengan gambar berikut ini
- Setelah itu pilih Border pada property kemudian pilih Titled Border, Isi Title dengan nama Halaman Login, jika masih kurang faham, lihat tampilan berikut
Membuat Form Menu
- Pada Package LSP buatlah JFrame Form Menu, klik Kanan Package LSP > New > JFrame Form > ketikkan
class name dengan nama Menu - Tambahkan komponen Desktop Pane, kemudian tambahkan menu bar diatasnya, lihat tampilan di bawah ini
- Tambahkan menu dengan cara klik kanan pada menu bar paling kiri > pilih Add Menu
- Buatlah Sub Menu dengan cara klik kanan pada File > Add Drom Palette > Menu Item
- Klik kanan kemudian pilih Edit Text dan beri nama Keluar, Ubah Variabelnya dengan cara klik Change Variabel Name kemudian isi dengan nama MKeluar
- Selanjutnya buat Menu Master dan Sub menunya
- Kemudian buat Menu Transaksi dan sub menunya
- Sehingga variablenya seperti gambar di bawah ini
Hati-hati dalam penulisan variabel, pastikan penulisannya sama persis
Membuat Form Pengguna
-
- Pada Package LSP buatlah JInternalFrame Form Pengguna, klik Kanan Package LSP > New > Other >
Swing GUI Form > buatlah JInternalFrame Form ketikkan class name dengan nama Pengguna - Seperti proses pembuatan form Login, sekarang buatlah Seperti tampilan di bawah ini
Ubah Variabel seperti gambar di bawah ini
- Ubah Property Closable, maximizable dan resizable pada InternalFrame seperti pada gambar di bawah
ini
- Pada Package LSP buatlah JInternalFrame Form Pengguna, klik Kanan Package LSP > New > Other >
Membuat Form Siswa
- Pada Package LSP buatlah JInternalFrame Form Siswa, klik Kanan Package LSP > New > JInternalFrame Form ketikkan class name dengan nama Siswa
- Buatlah Form seperti tampilan berikut ini
- Ubah Text dan Variable seperti aturan di bawah ini
Membuat Form Presensi
- Pada Package LSP buatlah JInternalFrame Form Presensi, klik Kanan Package LSP > New > JInternalFrame Form ketikkan class name dengan nama Presensi, buat tampilan seperti pada gambar di bawah ini
- Ubalah Variable dan Text name seperti gambar di bawah ini
<
Persiapan Ngoding
Form Login
- Kembali ke Form LOGIN, di menu Design double klik pada tombol keluar, isikan coding berikut
System.exit(0);
- Masih di Form Login, Double klik pada tambol Masuk, kemudian ketik code berikut
shobi.getCon(); try { String sql = "SELECT * FROM admin " + "WHERE username = '" + txtUser.getText() + "' AND password = '" + txtPass.getText() + "'"; Statement st = shobi.getConnection().createStatement(); ResultSet rsLogin = st.executeQuery(sql); rsLogin.next(); rsLogin.last(); //mengecek jumlah baris pada hasil query if (rsLogin.getRow()==1){ //jika login bertingkat if(rsLogin.getString("username").equals("Kasir")){ //arahkan ke menu kasir } else{ //arahkan ke menu admin } JOptionPane.showMessageDialog(null, "Login Berhasil!"); new Menu().setVisible(true); //<-- BILA MAU DIARAHKAN KE Frame Menu Utama this.dispose(); } else { JOptionPane.showMessageDialog(null, "Maaf, Username / Password salah!"); txtUser.setText(""); txtPass.requestFocus(); } } catch (SQLException e) { JOptionPane.showMessageDialog(null, "Login Gagal!"); }
- Di bawah class login tambahkan code seperti di bawah ini
setLocationRelativeTo(this);
- Sehingga hasil akhirnya seperti gambar berikut
Form Menu
- Kembali ke Form Menu, pada tombol keluar Masukkan code seperti di bawah ini
new Login().setVisible(true); this.dispose();
- Masih di Design Form Menu, Double klik pada tambol Pengguna
Pengguna P = new Pengguna(); desk.add(P); P.setVisible(true);
- Masih di Design Form Menu, Double klik pada tambol Siswa
Siswa S = new Siswa(); desk.add(S); S.setVisible(true);
- Masih di Design Form Menu, Double klik pada tambol Presensi
Presensi p = new Presensi(); desk.add(p); p.setVisible(true);
Form Pengguna
- Kembali ke Form Pengguna, masuk ke menu source, buat objek koneksi terlebih dahulu
- Buat method baru di dalam class Pengguna dengan nama mati, hidup dan nampil
private void nampil() { shobi.getCon(); shobi.tampil(tbSiswa, "SELECT * FROM admin"); } private void hidup(){ txtNama.setEnabled(true); txtPassword.setEnabled(true); txtUser.setEnabled(true); } private void mati(){ txtNama.setEnabled(false); txtPassword.setEnabled(false); txtUser.setEnabled(false); txtID.setVisible(false); lbID.setVisible(false); txtNama.setText(""); txtPassword.setText(""); txtUser.setText(""); txtID.setText(""); btSimpan.setEnabled(false); btUbah.setEnabled(false); btHapus.setEnabled(false); }
- Panggil method nampil dan mati di bawah contructor Pengguna, sehingga hasilnya akan seperti ini
public Pengguna() { initComponents(); nampil(); mati(); }
- Pada Form Pengguna Double Click Tombol tambah, tambahkan coding berikut
hidup(); btSimpan.setEnabled(true);
- Masih di Form Pengguna, Double Click Tombol Ubah, tambahkan coding berikut
shobi.getCon(); shobi.Eksekusi("UPDATE `admin` SET `username` = '"+txtUser.getText()+"', " + "`password` = '"+txtPassword.getText()+"', `Nama` = '"+txtNama.getText()+"' " + "WHERE id = '"+txtID.getText()+"';", "Berhasil Mengupdate"); nampil(); mati();
- Masih di Form Pengguna, Double Click Tombol Simpan, tambahkan coding berikut
if(txtNama.getText().equals("")){ JOptionPane.showMessageDialog(null, "Data Nama Belum diisi"); }else if (txtUser.getText().equals("")){ JOptionPane.showMessageDialog(null, "Data User Belum diisi"); }else if(txtPassword.getText().equals("")){ JOptionPane.showMessageDialog(null, "Data Password Belum diisi"); }else{ shobi.getCon(); shobi.Eksekusi("INSERT INTO `admin` (`username`, `password`, `Nama`) " + "VALUES ('"+txtUser.getText()+"', '"+txtPassword.getText()+"', '"+txtNama.getText()+"')", "Berhasil Menyimpan"); nampil(); mati(); }
- Masih di Form Pengguna, Double Click Tombol Hapus
int ok=JOptionPane.showConfirmDialog(null,"Apakah Anda yakin?","Konfirmasi",JOptionPane.YES_NO_OPTION); if(ok==0){ shobi.getCon(); shobi.Eksekusi("DELETE FROM ADMIN where id='"+txtID.getText()+"'", "Berhasil Menghapus"); nampil(); mati(); }
- Masih di Form Pengguna, Klik kanan JTable > Events > Mouse > MouseClicked
int i = tbSiswa.getSelectedRow(); txtID.setText(tbSiswa.getValueAt(i, 0).toString()); txtUser.setText(tbSiswa.getValueAt(i, 1).toString()); txtPassword.setText(tbSiswa.getValueAt(i, 2).toString()); txtNama.setText(tbSiswa.getValueAt(i, 3).toString()); btUbah.setEnabled(true); btTambah.setEnabled(false); btHapus.setEnabled(true); hidup(); //nampil();
Form Siswa
- Buat objek koneksi terlebih dahulu
koneksi shobi = new koneksi();
- Buat Method nampil, hidup dan mati
private void nampil() { shobi.getCon(); shobi.tampil(tbSiswa, "SELECT * FROM siswa"); } private void hidup(){ txtNama.setEnabled(true); txtAlamat.setEnabled(true); txtKelas.setEnabled(true); txtnis.setEnabled(true); cbJK.setEnabled(true); } private void mati(){ txtNama.setEnabled(false); txtAlamat.setEnabled(false); txtKelas.setEnabled(false); txtnis.setEnabled(false); cbJK.setEnabled(false); txtNama.setText(""); txtAlamat.setText(""); txtKelas.setText(""); txtnis.setText(""); btSimpan.setEnabled(false); btUbah.setEnabled(false); btHapus.setEnabled(false); }
- Panggil method nampil, hidup dan mati di bawah contruktur Siswa
nampil(); mati();
- Tombol Tambah
hidup(); btSimpan.setEnabled(true);
- Tombol Ubah
shobi.getCon(); shobi.Eksekusi("UPDATE `siswa` SET `NamaSiswa` = '"+txtNama.getText()+"', `JK` = '"+cbJK.getSelectedItem()+"', `Kelas` = '"+txtKelas.getText()+"', `Alamat` = '"+txtAlamat.getText()+"' " + "WHERE NIS = '"+txtnis.getText()+"';", "Berhasil Mengupdate"); nampil(); mati();
- Tombol Hapus
int ok=JOptionPane.showConfirmDialog(null,"Apakah Anda yakin?","Konfirmasi",JOptionPane.YES_NO_OPTION); if(ok==0){ shobi.getCon(); shobi.Eksekusi("DELETE FROM siswa where nis='"+txtnis.getText()+"'", "Berhasil Menghapus"); nampil(); mati(); }
- Tombol Simpan
shobi.getCon(); shobi.Eksekusi("INSERT INTO `siswa` (`NIS`, `NamaSiswa`, `JK`, `Kelas`, `Alamat`) " + "VALUES ('"+txtnis.getText()+"', '"+txtNama.getText()+"', '"+cbJK.getSelectedItem()+"', '"+txtKelas.getText()+"', '"+txtAlamat.getText()+"');", "OKE"); nampil(); mati();
- JTable Mouse Click
int i = tbSiswa.getSelectedRow(); txtnis.setText(tbSiswa.getValueAt(i, 0).toString()); txtNama.setText(tbSiswa.getValueAt(i, 1).toString()); cbJK.setSelectedItem(tbSiswa.getValueAt(i, 2).toString()); txtKelas.setText(tbSiswa.getValueAt(i, 3).toString()); txtAlamat.setText(tbSiswa.getValueAt(i, 4).toString()); btUbah.setEnabled(true); btTambah.setEnabled(false); btHapus.setEnabled(true); hidup();
- Tombol Cari
shobi.getCon(); shobi.tampil(tbSiswa,"SELECT * FROM `siswa` WHERE `NamaSiswa` LIKE '%"+txtCari.getText()+"%'");
Form Presensi
- Buat objek koneksi terlebih dahulu
koneksi shobi = new koneksi(); int Nis1=0;
variabel Nis1 ini digunakan untuk menampung nilai NIS ketika memilih item pada Combo NIS, variabel Nis1 ini nanti yang akan kita gunakan untuk menyimpan NIS di database.
- Buat Method nampil, nampilCombo, hidup dan mati
private void hidup(){ txtKeterangan.setEnabled(true); cbNIS.setEnabled(true); cbPresensi.setEnabled(true); } private void mati(){ txtKeterangan.setEnabled(false); cbNIS.setEnabled(false); cbPresensi.setEnabled(false); txtID.setVisible(false); txtKeterangan.setText(""); btSimpan.setEnabled(false); btHapus.setEnabled(false); } private void nampilCombo(){ shobi.getCon(); shobi.combo("select * from siswa","NIS","NamaSiswa", cbNIS); // perintah shobi.combo() ini adalah memanggil method combo yang ada di dalam koneksi, // tujuannya untuk menampilkan NIS beserta NamaSiswa di cbNIS } private void nampil(){ shobi.getCon(); shobi.tampil(tbSiswa, "SELECT * From vpresensi"); }
- Panggil method nampil, nampilCombo, hidup dan mati di bawah contruktur Siswa
nampil(); nampilCombo(); mati(); hidup();
- Tombol Tambah
hidup(); btSimpan.setEnabled(true);
- Tombol Hapus
int ok=JOptionPane.showConfirmDialog(null,"Apakah Anda yakin?","Konfirmasi",JOptionPane.YES_NO_OPTION); if(ok==0){ shobi.getCon(); shobi.Eksekusi("DELETE FROM presensi where id='"+txtID.getText()+"'", "Berhasil Menghapus"); nampil(); mati(); }
- Tombol Simpan
shobi.getCon(); shobi.Eksekusi("INSERT INTO `presensi` (`id`, `idAdmin`, `NIS`, `kehadiran`, `tgl`, `ket`) VALUES (NULL, '1', '"+Nis1+"', '"+cbPresensi.getSelectedItem()+"', CURRENT_TIMESTAMP, '"+txtKeterangan.getText()+"');", "Berhasil"); nampil();
Perhatikan, untuk nis kita gunakan variabel yang sudah kita deklarasikan di atas, yaitu Nis1. Jangan diberi dari cbNis.getSelectedItem(), agar tidak error.
- JTable Mouse Click
int i = tbSiswa.getSelectedRow(); txtID.setText(tbSiswa.getValueAt(i, 0).toString()); cbNIS.setSelectedItem(tbSiswa.getValueAt(i, 1).toString()); cbPresensi.setSelectedItem(tbSiswa.getValueAt(i, 2).toString()); txtKeterangan.setText(tbSiswa.getValueAt(i, 3).toString()); btTambah.setEnabled(false); btHapus.setEnabled(true); hidup();
- Tombol Cari
shobi.getCon(); shobi.tampil(tbSiswa,"SELECT * FROM `vpresensi` WHERE `nis` LIKE '%"+txtCari.getText()+"%'");
- Combobox Nis
String data[]=cbNIS.getSelectedItem().toString().split("-"); Nis1=Integer.valueOf(data[0]);
Perintah tersebut ditaruh pada combo nis, fungsinya untuk memecah antara NIS dan Nama yang terdapat pada Combo tersebut.
Kenapa Kok Perlu di pecah?
Iya, karena kita hanya butuh NIS saja, dan di database type data untuk NIS adalah integer, sehingga jika kita tidak membuat fungsi ini, maka data NIS tidak akan tersimpan, karena nilai yang diinputkan berupa string