Modul 14: JDBC - IvanSholana/Pemrograman-Berbasis-Objek-Sistem-Informasi GitHub Wiki
JDBC (Java Database Connectivity) adalah sebuah API (Application Programming Interface) yang disediakan oleh Java untuk memungkinkan aplikasi Java berinteraksi dengan berbagai jenis database. JDBC menyediakan cara standar untuk menghubungkan aplikasi Java dengan database relasional seperti MySQL, PostgreSQL, Oracle, SQLite, dan lainnya.
Kode:
private Connection connect() {
try {
return DriverManager.getConnection(URL, USERNAME, PASSWORD);
} catch (SQLException e) {
throw new RuntimeException("Gagal menghubungkan ke database", e);
}
}
Penjelasan:
-
Connection
:- Objek
Connection
digunakan untuk membuka koneksi ke database. -
DriverManager.getConnection(URL, USERNAME, PASSWORD)
:- Menginisialisasi koneksi menggunakan URL, username, dan password.
- URL: Format untuk MySQL adalah
jdbc:mysql://<host>:<port>/<database_name>
. - Username/Password: Kredensial untuk otentikasi.
- Objek
-
Error Handling:
-
SQLException
ditangkap untuk menghindari crash jika koneksi gagal. -
RuntimeException
dilempar jika gagal terhubung, sehingga developer bisa mengetahui masalahnya.
-
Kode:
public void createMahasiswa(String nama, String nim, String jurusan, int angkatan, String email) {
String sql = "INSERT INTO mahasiswa (nama, nim, jurusan, angkatan, email) VALUES (?, ?, ?, ?, ?)";
try (Connection con = connect(); PreparedStatement pstmt = con.prepareStatement(sql)) {
pstmt.setString(1, nama);
pstmt.setString(2, nim);
pstmt.setString(3, jurusan);
pstmt.setInt(4, angkatan);
pstmt.setString(5, email);
pstmt.executeUpdate();
System.out.println("Data mahasiswa berhasil ditambahkan!");
} catch (SQLException e) {
System.err.println("Gagal menambahkan data mahasiswa: " + e.getMessage());
}
}
Penjelasan:
-
PreparedStatement:
-
PreparedStatement
digunakan untuk mencegah SQL Injection. - Placeholder
?
di query SQL akan diisi nilai secara dinamis menggunakanpstmt.set<Type>(parameterIndex, value)
.
-
-
Query INSERT:
- SQL:
INSERT INTO mahasiswa (kolom1, kolom2, ...) VALUES (?, ?, ...)
. - Setiap tanda
?
merepresentasikan kolom, danset<Type>
menetapkan nilai untuk kolom sesuai posisi placeholder.
- SQL:
-
Eksekusi Query:
-
pstmt.executeUpdate()
: Digunakan untuk operasi DML (Data Manipulation Language), seperti INSERT, UPDATE, DELETE.
-
-
Error Handling:
- Kesalahan SQL (seperti pelanggaran aturan tabel) ditangkap dengan
SQLException
.
- Kesalahan SQL (seperti pelanggaran aturan tabel) ditangkap dengan
Kode:
public void readMahasiswa() {
String sql = "SELECT * FROM mahasiswa";
try (Connection con = connect(); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(sql)) {
System.out.println("Daftar Mahasiswa:");
while (rs.next()) {
System.out.printf("ID: %d | Nama: %s | NIM: %s | Jurusan: %s | Angkatan: %d | Email: %s%n",
rs.getInt("id"), rs.getString("nama"), rs.getString("nim"), rs.getString("jurusan"),
rs.getInt("angkatan"), rs.getString("email"));
}
} catch (SQLException e) {
System.err.println("Gagal membaca data mahasiswa: " + e.getMessage());
}
}
Penjelasan:
-
Statement dan ResultSet:
-
Statement
digunakan untuk eksekusi query SQL langsung (tanpa parameter dinamis). -
ResultSet
menyimpan hasil query SELECT, dengan metode seperti:-
rs.next()
: Memindahkan kursor ke baris berikutnya. -
rs.get<Type>(kolom)
: Mengambil nilai dari kolom dengan tipe data tertentu.
-
-
-
Iterasi Hasil:
-
while (rs.next())
digunakan untuk membaca setiap baris hasil query. - Format output disesuaikan dengan kolom yang diambil.
-
-
Error Handling:
- Kesalahan query atau koneksi ditangkap oleh
SQLException
.
- Kesalahan query atau koneksi ditangkap oleh
Kode:
public void updateMahasiswa(int id, String nama, String jurusan, int angkatan, String email) {
String sql = "UPDATE mahasiswa SET nama = ?, jurusan = ?, angkatan = ?, email = ? WHERE id = ?";
try (Connection con = connect(); PreparedStatement pstmt = con.prepareStatement(sql)) {
pstmt.setString(1, nama);
pstmt.setString(2, jurusan);
pstmt.setInt(3, angkatan);
pstmt.setString(4, email);
pstmt.setInt(5, id);
int rowsAffected = pstmt.executeUpdate();
if (rowsAffected > 0) {
System.out.println("Data mahasiswa berhasil diperbarui!");
} else {
System.out.println("Data mahasiswa dengan ID " + id + " tidak ditemukan.");
}
} catch (SQLException e) {
System.err.println("Gagal memperbarui data mahasiswa: " + e.getMessage());
}
}
Penjelasan:
-
Query UPDATE:
-
UPDATE mahasiswa SET kolom1 = ?, kolom2 = ? ... WHERE kondisi
. - Placeholder
?
diisi sesuai posisi.
-
-
Eksekusi Query:
-
pstmt.executeUpdate()
mengembalikan jumlah baris yang terpengaruh (rows affected). - Jika hasilnya
> 0
, berarti data berhasil diperbarui.
-
-
Error Handling:
- Kesalahan eksekusi ditangkap oleh
SQLException
.
- Kesalahan eksekusi ditangkap oleh
Kode:
public void deleteMahasiswa(int id) {
String sql = "DELETE FROM mahasiswa WHERE id = ?";
try (Connection con = connect(); PreparedStatement pstmt = con.prepareStatement(sql)) {
pstmt.setInt(1, id);
int rowsAffected = pstmt.executeUpdate();
if (rowsAffected > 0) {
System.out.println("Data mahasiswa berhasil dihapus!");
} else {
System.out.println("Data mahasiswa dengan ID " + id + " tidak ditemukan.");
}
} catch (SQLException e) {
System.err.println("Gagal menghapus data mahasiswa: " + e.getMessage());
}
}
Penjelasan:
-
Query DELETE:
-
DELETE FROM mahasiswa WHERE kondisi
. - Placeholder
?
digunakan untuk menetapkan ID mahasiswa yang akan dihapus.
-
-
Eksekusi Query:
-
pstmt.executeUpdate()
menghapus baris yang sesuai kondisi. - Jumlah baris terpengaruh (
rows affected
) diperiksa untuk validasi.
-
-
Error Handling:
- Menangani kesalahan seperti referensi silang (foreign key).
Kode:
public static void main(String[] args) {
MahasiswaCRUD crud = new MahasiswaCRUD();
// CREATE
crud.createMahasiswa("Test User", "NIM999", "Teknik Informatika", 2023, "test.user@example.com");
// READ
crud.readMahasiswa();
// UPDATE
crud.updateMahasiswa(1, "Ahmad Fauzi Updated", "Sistem Informasi", 2020, "updated.ahmad@example.com");
// DELETE
crud.deleteMahasiswa(10);
}
Penjelasan:
- Memanggil fungsi CRUD secara berurutan untuk demonstrasi:
- Menambahkan data.
- Membaca data.
- Memperbarui data.
- Menghapus data.
- Memberikan output ke konsol untuk memvalidasi hasil eksekusi.
-
Kelas Utama JDBC:
-
DriverManager
,Connection
,PreparedStatement
,Statement
,ResultSet
.
-
-
Operasi CRUD:
- INSERT (Create), SELECT (Read), UPDATE, DELETE.
-
PreparedStatement:
- Aman terhadap SQL Injection.
- Lebih efisien untuk query berparameter.
-
Error Handling:
- Penanganan
SQLException
menggunakan bloktry-catch
.
- Penanganan
-
Best Practices:
- Gunakan
try-with-resources
untuk memastikan sumber daya (koneksi, statement) ditutup secara otomatis. - Validasi jumlah baris terpengaruh (
rows affected
) untuk mengetahui hasil operasi.
- Gunakan