Modul 14: JDBC - IvanSholana/Pemrograman-Berbasis-Objek-Sistem-Informasi GitHub Wiki

Apa itu JDBC?

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.

1. Koneksi ke Database

Kode:

private Connection connect() {
    try {
        return DriverManager.getConnection(URL, USERNAME, PASSWORD);
    } catch (SQLException e) {
        throw new RuntimeException("Gagal menghubungkan ke database", e);
    }
}

Penjelasan:

  1. 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.
  2. Error Handling:

    • SQLException ditangkap untuk menghindari crash jika koneksi gagal.
    • RuntimeException dilempar jika gagal terhubung, sehingga developer bisa mengetahui masalahnya.

2. Operasi CREATE

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:

  1. PreparedStatement:

    • PreparedStatement digunakan untuk mencegah SQL Injection.
    • Placeholder ? di query SQL akan diisi nilai secara dinamis menggunakan pstmt.set<Type>(parameterIndex, value).
  2. Query INSERT:

    • SQL: INSERT INTO mahasiswa (kolom1, kolom2, ...) VALUES (?, ?, ...).
    • Setiap tanda ? merepresentasikan kolom, dan set<Type> menetapkan nilai untuk kolom sesuai posisi placeholder.
  3. Eksekusi Query:

    • pstmt.executeUpdate(): Digunakan untuk operasi DML (Data Manipulation Language), seperti INSERT, UPDATE, DELETE.
  4. Error Handling:

    • Kesalahan SQL (seperti pelanggaran aturan tabel) ditangkap dengan SQLException.

3. Operasi READ

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:

  1. 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.
  2. Iterasi Hasil:

    • while (rs.next()) digunakan untuk membaca setiap baris hasil query.
    • Format output disesuaikan dengan kolom yang diambil.
  3. Error Handling:

    • Kesalahan query atau koneksi ditangkap oleh SQLException.

4. Operasi UPDATE

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:

  1. Query UPDATE:

    • UPDATE mahasiswa SET kolom1 = ?, kolom2 = ? ... WHERE kondisi.
    • Placeholder ? diisi sesuai posisi.
  2. Eksekusi Query:

    • pstmt.executeUpdate() mengembalikan jumlah baris yang terpengaruh (rows affected).
    • Jika hasilnya > 0, berarti data berhasil diperbarui.
  3. Error Handling:

    • Kesalahan eksekusi ditangkap oleh SQLException.

5. Operasi DELETE

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:

  1. Query DELETE:

    • DELETE FROM mahasiswa WHERE kondisi.
    • Placeholder ? digunakan untuk menetapkan ID mahasiswa yang akan dihapus.
  2. Eksekusi Query:

    • pstmt.executeUpdate() menghapus baris yang sesuai kondisi.
    • Jumlah baris terpengaruh (rows affected) diperiksa untuk validasi.
  3. Error Handling:

    • Menangani kesalahan seperti referensi silang (foreign key).

6. Main Method (Testing)

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:

  1. Memanggil fungsi CRUD secara berurutan untuk demonstrasi:
    • Menambahkan data.
    • Membaca data.
    • Memperbarui data.
    • Menghapus data.
  2. Memberikan output ke konsol untuk memvalidasi hasil eksekusi.

Materi Lengkap JDBC yang Terkait

  1. Kelas Utama JDBC:

    • DriverManager, Connection, PreparedStatement, Statement, ResultSet.
  2. Operasi CRUD:

    • INSERT (Create), SELECT (Read), UPDATE, DELETE.
  3. PreparedStatement:

    • Aman terhadap SQL Injection.
    • Lebih efisien untuk query berparameter.
  4. Error Handling:

    • Penanganan SQLException menggunakan blok try-catch.
  5. 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.
โš ๏ธ **GitHub.com Fallback** โš ๏ธ