Tujuan Praktikum
Pada pertemuan ini mahasiswa mempraktikkan pembuatan database presensi pegawai sampai aplikasi Java berhasil terhubung ke MySQL.
- Mahasiswa mampu membuat database
db_presensi_pegawai. - Mahasiswa mampu membuat tabel
bagian,pegawai,users, danpresensi. - Mahasiswa mampu mengisi data awal langsung melalui phpMyAdmin / MySQLFront.
- Mahasiswa mampu menjalankan query dasar untuk mengecek data.
- Mahasiswa mampu menambahkan library MySQL Connector/J ke project.
- Mahasiswa mampu membuat file koneksi database di Java.
- Mahasiswa mampu mengetes koneksi Java ke MySQL.
Persiapan
Sebelum praktik, pastikan kebutuhan berikut sudah tersedia.
Kebutuhan praktikum:
- NetBeans
- Apache Tomcat
- MySQL / MariaDB
- phpMyAdmin / MySQLFront
- Project Java Web
- MySQL Connector/JFile library yang digunakan:
mysql-connector-j-x.x.x.jarContoh:
mysql-connector-j-8.4.0.jarLetakkan file .jar ke folder berikut:
web/WEB-INF/lib/Struktur folder:
web/
└── WEB-INF/
└── lib/
└── mysql-connector-j-8.4.0.jarKonsep Singkat
Database digunakan untuk menyimpan data aplikasi secara permanen.
Pada aplikasi presensi pegawai, data utama yang dibutuhkan adalah:
- Data bagian atau divisi pegawai.
- Data pegawai.
- Data user untuk login.
- Data presensi harian pegawai.
Relasi tabel yang digunakan:
bagian 1 --- * pegawai
pegawai 1 --- * presensi
pegawai 1 --- 1 usersPenjelasan singkat:
- Satu bagian dapat memiliki banyak pegawai.
- Satu pegawai dapat memiliki banyak data presensi.
- Satu pegawai dapat memiliki satu akun user.
- User admin boleh tidak terhubung ke pegawai, sehingga
id_pegawaipada tabelusersdibuatNULL.
Langkah 1
Buka phpMyAdmin / MySQLFront, lalu buat database baru.
CREATE DATABASE db_presensi_pegawai;
USE db_presensi_pegawai;Pastikan database db_presensi_pegawai sudah aktif sebelum membuat tabel.
Langkah 2
Buat tabel bagian.
CREATE TABLE bagian (
id_bagian INT AUTO_INCREMENT PRIMARY KEY,
nama_bagian VARCHAR(100) NOT NULL
);Isi data awal bagian.
INSERT INTO bagian (nama_bagian) VALUES
('Keuangan'),
('IT'),
('HRD'),
('Administrasi');Cek data bagian.
SELECT * FROM bagian;Langkah 3
Buat tabel pegawai.
CREATE TABLE pegawai (
id_pegawai INT AUTO_INCREMENT PRIMARY KEY,
nip VARCHAR(30) NOT NULL UNIQUE,
nama_pegawai VARCHAR(100) NOT NULL,
jenis_kelamin ENUM('L', 'P') NOT NULL,
no_hp VARCHAR(20),
alamat TEXT,
id_bagian INT NOT NULL,
status_pegawai ENUM('Aktif', 'Nonaktif') DEFAULT 'Aktif',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (id_bagian) REFERENCES bagian(id_bagian)
);Isi data awal pegawai.
INSERT INTO pegawai
(nip, nama_pegawai, jenis_kelamin, no_hp, alamat, id_bagian)
VALUES
('PGW001', 'Andi Saputra', 'L', '081234567890', 'Tangerang', 1),
('PGW002', 'Siti Aminah', 'P', '081234567891', 'Jakarta', 2),
('PGW003', 'Budi Santoso', 'L', '081234567892', 'Bekasi', 3);Cek data pegawai.
SELECT * FROM pegawai;Cek data pegawai beserta nama bagian.
SELECT
p.id_pegawai,
p.nip,
p.nama_pegawai,
p.jenis_kelamin,
p.no_hp,
p.alamat,
b.nama_bagian,
p.status_pegawai
FROM pegawai p
JOIN bagian b ON p.id_bagian = b.id_bagian;Langkah 4
Buat tabel users.
CREATE TABLE users (
id_user INT AUTO_INCREMENT PRIMARY KEY,
id_pegawai INT NULL,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
role ENUM('admin', 'pegawai') NOT NULL,
status_user ENUM('Aktif', 'Nonaktif') DEFAULT 'Aktif',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (id_pegawai) REFERENCES pegawai(id_pegawai)
);Isi data awal user.
INSERT INTO users
(id_pegawai, username, password, role)
VALUES
(NULL, 'admin', 'admin123', 'admin'),
(1, 'PGW001', 'pegawai123', 'pegawai'),
(2, 'PGW002', 'pegawai123', 'pegawai'),
(3, 'PGW003', 'pegawai123', 'pegawai');Cek data user.
SELECT * FROM users;Cek user beserta data pegawai.
SELECT
u.id_user,
u.username,
u.role,
u.status_user,
p.nip,
p.nama_pegawai
FROM users u
LEFT JOIN pegawai p ON u.id_pegawai = p.id_pegawai;Langkah 5
Buat tabel presensi.
CREATE TABLE presensi (
id_presensi INT AUTO_INCREMENT PRIMARY KEY,
id_pegawai INT NOT NULL,
tanggal DATE NOT NULL,
jam_masuk TIME NULL,
jam_pulang TIME NULL,
status_presensi ENUM('Hadir', 'Izin', 'Sakit', 'Alpha') DEFAULT 'Hadir',
keterangan TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (id_pegawai) REFERENCES pegawai(id_pegawai),
UNIQUE KEY unique_presensi_harian (id_pegawai, tanggal)
);Catatan penting:
UNIQUE KEY unique_presensi_harian (id_pegawai, tanggal)Artinya satu pegawai hanya boleh memiliki satu data presensi pada tanggal yang sama.
Langkah 6
Simulasikan presensi masuk langsung dari query SQL.
INSERT INTO presensi
(id_pegawai, tanggal, jam_masuk, status_presensi)
VALUES
(1, CURDATE(), CURTIME(), 'Hadir');Cek data presensi.
SELECT * FROM presensi;Langkah 7
Simulasikan presensi pulang langsung dari query SQL.
UPDATE presensi
SET jam_pulang = CURTIME()
WHERE id_pegawai = 1
AND tanggal = CURDATE();Cek hasil presensi.
SELECT
pr.id_presensi,
p.nip,
p.nama_pegawai,
pr.tanggal,
pr.jam_masuk,
pr.jam_pulang,
pr.status_presensi
FROM presensi pr
JOIN pegawai p ON pr.id_pegawai = p.id_pegawai;Langkah 8
Jalankan query laporan presensi sederhana.
SELECT
pr.tanggal,
p.nip,
p.nama_pegawai,
b.nama_bagian,
pr.jam_masuk,
pr.jam_pulang,
pr.status_presensi,
pr.keterangan
FROM presensi pr
JOIN pegawai p ON pr.id_pegawai = p.id_pegawai
JOIN bagian b ON p.id_bagian = b.id_bagian
ORDER BY pr.tanggal DESC, p.nama_pegawai ASC;Query ini menampilkan data presensi lengkap dengan nama pegawai dan nama bagian.
Langkah 9
Tambahkan MySQL Connector/J ke project.
Langkah di NetBeans:
Klik kanan project
→ Properties
→ Libraries
→ Add JAR/Folder
→ pilih mysql-connector-j-x.x.x.jar
→ Apply
→ OKPastikan library muncul di bagian:
LibrariesLangkah 10
Buat package baru bernama config.
Di dalam package tersebut, buat file:
DBConnection.javaIsi kode berikut:
package config;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBConnection {
private static final String URL = "jdbc:mysql://localhost:3306/db_presensi_pegawai";
private static final String USER = "root";
private static final String PASSWORD = "";
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(URL, USER, PASSWORD);
}
}Sesuaikan USER dan PASSWORD dengan konfigurasi MySQL masing-masing komputer.
Langkah 11
Buat file test koneksi.
Nama file:
TestConnection.javaKode:
package config;
import java.sql.Connection;
public class TestConnection {
public static void main(String[] args) {
try {
Connection conn = DBConnection.getConnection();
if (conn != null) {
System.out.println("Koneksi database berhasil");
}
conn.close();
} catch (Exception e) {
System.out.println("Koneksi database gagal");
e.printStackTrace();
}
}
}Pengujian
Jalankan file TestConnection.java.
Jika koneksi berhasil, output yang muncul:
Koneksi database berhasilJika koneksi gagal, cek kembali:
- MySQL sudah running
- Nama database benar
- Username MySQL benar
- Password MySQL benar
- Port MySQL benar
- MySQL Connector/J sudah masuk projectTroubleshooting
| Masalah | Penyebab | Solusi |
|---|---|---|
| Database tidak ditemukan | Database belum dibuat atau nama database salah | Jalankan CREATE DATABASE db_presensi_pegawai; lalu pastikan URL JDBC memakai nama database yang sama |
| Access denied for user | Username atau password MySQL salah | Sesuaikan USER dan PASSWORD pada DBConnection.java |
| Connection refused | MySQL belum berjalan atau port salah | Jalankan service MySQL dan cek port yang digunakan |
| No suitable driver found | MySQL Connector/J belum masuk project | Masukkan file .jar ke WEB-INF/lib dan tambahkan ke Libraries |
| Duplicate entry pada presensi | Pegawai yang sama sudah presensi pada tanggal yang sama | Gunakan UPDATE untuk jam pulang, bukan INSERT ulang |
| Foreign key constraint fails | Data relasi belum tersedia | Pastikan data bagian dan pegawai sudah ada sebelum insert data terkait |
Tugas Praktikum
- Buat database
db_presensi_pegawai. - Buat tabel
bagian,pegawai,users, danpresensi. - Isi data dummy bagian, pegawai, dan user.
- Jalankan query cek data pada setiap tabel.
- Simulasikan presensi masuk dan presensi pulang.
- Jalankan query laporan presensi sederhana.
- Tambahkan MySQL Connector/J ke project.
- Buat
DBConnection.javadanTestConnection.java. - Jalankan test koneksi sampai muncul output
Koneksi database berhasil.
Kesimpulan
Pada pertemuan ini mahasiswa sudah membuat database presensi pegawai dari awal, membuat tabel utama, mengisi data awal, menjalankan query dasar, memasang MySQL Connector/J, membuat koneksi Java ke MySQL, dan mengetes koneksi database.
Output akhir yang harus sudah dimiliki:
Database db_presensi_pegawai
Tabel bagian
Tabel pegawai
Tabel users
Tabel presensi
Data dummy awal
Query dasar berhasil dijalankan
Library MySQL Connector/J terpasang
DBConnection.java
TestConnection.java
Koneksi Java ke MySQL berhasil