Membuat aplikasi CRUD menggunakan Java Swing dan MySQL Part 2

Kali ini penulis akan melanjutkan tutorial sebelumnya, syarat untuk mengikuti tutorial ini sudah tertera sebelumnya pada part 1 dari tutorial ini.  Dan pastikan anda sudah selesai membuat database dengan nama rumah_coding serta pastikan anda sudah berhasil membuat table di database tersebut dengan nama buku. Karena pada kali ini kita akan mulai membuat aplikasi java untuk mengontrol data pada database tersebut.

1. Menyiapkan Project

Bukan aplikasi Netbeans anda dan klik File > New Project sehingga akan muncul jendela dialog seperti dibawah ini :

Pastikan anda memilih Categories Java dan pilih Projects Java Application seperti yang ditunjukkan pada gambar diatas lalu klik Next. Pada jendela dialog dibawah ini :

anda hanya perlu mengganti kolom isian Project Name menjadi DataManagerBuku, sementara yang lainnya bisa diabaikan. Setelah itu klik Finish.

2. Netbeans Project Structure

Folder Source Package merupakan tempat untuk menaruh file-file java yang akan dibuat nanti sedangkan folder Libraries merupakan tempat sekumpulan aplikasi jar yang sudah jadi dan akan dikombinasikan dengan program ini,  yang mana nantinya akan menggunakan library JDBC Driver dari MySQL.

Dari gambar diatas project DataManagerBuku ini sudah memiliki root package dengan nama datamanagerbuku yang nantinya akan dijadikan folder utama dalam membuat aplikasi ini. Dan didalam folder ini juga sudah ada class dengan nama DataManagerBuku.java yang nantinya juga akan dijadikan sebagai class utama dari aplikasi. Artinya program ini akan mengeksekusi class ini terlebih dahulu.

3. Menambahkan Libraries Ke Project

Klik kanan pada folder Libraries lalu pilih Add Library, sehingga muncul dialog seperti dibawah ini :

Cari dan pilih MySQL JDBC Driver seperti yang tampak pada gambar diatas, kemudian klik Add Library sehingga project structure menjadi seperti dibawah ini :

 

4. Membuat class ConnectionHelper

Class ini nantinya akan digunakan sebagai pembantu koneksi antara aplikasi dengan database server kita, lebih khusunya dengan database yg sudah kita buat sebelumnya yaitu database rumah_coding.

Sekarang buat package baru dengan cara klik kanan pas bagian package datamanagerbuku sehingga muncul dialog seperti dibawah ini :

Isikan kolom package name menjadi database seperti apa tampak pada gambar diatas. Jika berhasil maka daftar package anda sekarang menjadi seperti dibawah ini :

Sekarang buat class baru didalam package database dan beri namanya sebagai ConnectionHelper. Perhatikan gambar dibawah ini untuk lebih jelasnya :

Buka class tersebut dan ubah codenya menjadi seperti dibawah ini :

import com.mysql.jdbc.Driver;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/**
 *
 * @author dika
 */
public class ConnectionHelper {

    private static final String DATABASE_NAME = "rumah_coding";
    private static final String USER = "root";
    private static final String PASSWORD = "";
    private static final String URL = "jdbc:mysql://localhost:3306/" + DATABASE_NAME;

    public static Connection getConnection() throws SQLException {
        DriverManager.registerDriver(new Driver());
        Connection connection = 
                DriverManager.getConnection(URL, USER, PASSWORD);
        return connection;
    }
}

Penjelasan :

DATABASE_NAME adalah variabel bertipe data String yang akan menampung nama database yang akan dihubungkan.

USER adalah variabel bertipe data String yang akan menampung nama user yang akan digunakan untuk mengakses database yang akan dihubungkan. Secara default usernya adalah root.

PASSWORD adalah variabel bertipe data String yang akan menampung password yang akan digunakan untuk menghubungkan database.

Sedangkan code didalam method getConnection merupakan code untuk mendaftarkan libraries mysql driver dan membuat koneksi ke database berdasarkan setup yang telah dideklarasikan sebelumnya.

Sekarang buka class DataManagerBuku dan ubah codenya menjadi seperti dibawah ini :

import datamanagerbuku.database.ConnectionHelper;
import java.sql.SQLException;

/**
 *
 * @author dika
 */
public class DataManagerBuku {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        testConnection();
    }

    private static void testConnection() {
        try {
            ConnectionHelper.getConnection();
            System.out.println("Database connected");
        } catch (SQLException ex) {
            System.out.println("Failed to connect database");
        }
    }
}

Kemudian run project dengan cara menekan tombol   pada toolbar Netbeans IDE. Akan tetapi anda juga perlu menjalankan server apache dan mysql terlebih dahulu melalui Xampp control panel. Dan jika saat dijalankan anda dapat melihat output seperti dibawah ini :

Maka selamat anda sudah berhasil membuat koneksi ke database server.

5. Membuat Class Model

Kali ini kita akan membuat class model dengan nama Buku, dimana class ini merupakan representasi benda nyata atau object nyata yaitu buku. Data yang akan digunakan dari object buku adalah judul buku, pengarang, penerbit,  dan tahun terbit. Hal ini sesuai dengan design table buku pada database kita.

Langkah pertama yang perlu dilakukan adalah membuat package baru bernama models. Cara membuat package baru sama dengan membuat package database diatas, hanya saja nama package kali ini adalah models. Berikut struktur project saat ini jika anda berhasil membuat package model :

Didalam package models buat class baru dengan nama Buku, seperti yang tampak pada gambar dibawah ini :

Kemudian edit code didalam class Buku menjadi seperti dibawah ini :

public class Buku {
    private long id;
    private String judulBuku;
    private String penerbit;
    private String pengarang;
    private int tahunTerbit;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getJudulBuku() {
        return judulBuku;
    }

    public void setJudulBuku(String judulBuku) {
        this.judulBuku = judulBuku;
    }

    public String getPenerbit() {
        return penerbit;
    }

    public void setPenerbit(String penerbit) {
        this.penerbit = penerbit;
    }

    public String getPengarang() {
        return pengarang;
    }

    public void setPengarang(String pengarang) {
        this.pengarang = pengarang;
    }

    public int getTahunTerbit() {
        return tahunTerbit;
    }

    public void setTahunTerbit(int tahunTerbit) {
        this.tahunTerbit = tahunTerbit;
    }
}

Selamat anda baru saja membuat representasi object nyata ke dalam class java. Teknik ini lebih dikenal sebagai pojo dalam java.

6. Membuat class BukuDatasource

Sekarang buatlah class baru di dalam package database dengan nama BukuDatasource. Class inilah yang akan bertanggung jawab dalam hal menyimpan data buku baru, memperbaharui data buku lama, menghapus data buku yang telah tersimpan sebelumnya dan juga mencari data buku yang sudah tersimpan sebelumnya. Jika dipersingkat maka class ini berfungsi sebagai implementasi konsep CRUD di mysql.

Jika anda sudah berhasil membuat classnya maka seharusnya sekarang terdapat 2 class didalam package database, seperti yang tampak pada gambar dibawah ini :

Sekarang edit code di dalam class BukuDatasource menjadi seperti dibawah ini :

import datamanagerbuku.models.Buku;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;

/**
 *
 * @author dika
 */
public class BukuDatasource {
    public void save(Buku buku) throws SQLException {
        
    }
    
    public void update(Buku buku) throws SQLException {
        
    }
    
    public void delete(Buku buku) throws SQLException {
        
    }
    
    public List<Buku> findAll() throws SQLException {
        return null;
    }
}

Sekarang edit code method save menjadi seperti dibawah ini :

public void save(Buku buku) throws SQLException {
        String sql = "INSERT INTO buku(judul, pengarang, penerbit, tahun_terbit) VALUES (?, ?, ?, ?)";
        Connection connection = ConnectionHelper.getConnection();
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        
        preparedStatement.setString(1, buku.getJudulBuku());
        preparedStatement.setString(3, buku.getPengarang());
        preparedStatement.setString(2, buku.getPenerbit());
        preparedStatement.setInt(4, buku.getTahunTerbit());
        
        preparedStatement.executeUpdate();
}

What is PrepareStatement ?

Merupakan class java yang dapat mendukung fitur precompile query sql, artinya kita dapat menggunakan query yang sama untuk nilai parameter query yang berbeda. Contoh : Sebelum menggunakan prepare statement :

Select *from buku where id=1;
Select *from buku where id=1;

Terlihat diatas bahwa kedua query tersebut dimaksudkan untuk melakukan pencarian data buku berdasarkan id.
Kedua struktur query tersebut terlihat sama yang berbeda hanya pada nilai id-nya saja. Disinilah kegunanaan dari
prepare statement dimana kita hanya memerlukan untuk mengisi value id-nya saja tanpa menulis ulang query-nya secara
berulang-ulang. Sehingga saat menggunakan prepare statement, query-nya menjadi seperti dibawah ini :

 
Select *from buku where id=?;

Sekarang edit isi dari method update menjadi seperti dibawah ini :

 
public void update(Buku buku) throws SQLException {
        String sql = "UPDATE buku SET judul=?, pengarang=?, penerbit=?, tahun_terbit=? WHERE id=?";
        Connection connection = ConnectionHelper.getConnection();
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        preparedStatement.setString(1, buku.getJudulBuku());
        preparedStatement.setString(2, buku.getPengarang());
        preparedStatement.setString(3, buku.getPenerbit());
        preparedStatement.setInt(4, buku.getTahunTerbit());
        preparedStatement.setLong(5, buku.getId());
        preparedStatement.executeUpdate();
}

Sekarang edit isi dari method delete menjadi seperti dibawah ini :

 
public void delete(Buku buku) throws SQLException {
        String sql = "DELETE FROM buku WHERE id=?";
        Connection connection = ConnectionHelper.getConnection();
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        preparedStatement.setLong(1, buku.getId());
        preparedStatement.executeUpdate();
}

Sekarang edit isi dari method findAll menjadi seperti dibawah ini :

 
public List<Buku> findAll() throws SQLException {
        String sql = "SELECT *FROM buku";
        Connection connection = ConnectionHelper.getConnection();
        ResultSet resultSet = connection.createStatement().executeQuery(sql);
        List<Buku> bukuList = new ArrayList<>();
        while (resultSet.next()) {            
            Buku buku = new Buku();
            buku.setId(resultSet.getLong("id"));
            buku.setJudulBuku(resultSet.getString("judul"));
            buku.setPengarang(resultSet.getString("pengarang"));
            buku.setPenerbit("penerbit");
            buku.setTahunTerbit(resultSet.getInt("tahun_terbit"));
            bukuList.add(buku);
        }
        return bukuList;
}

What is ResultSet ?

Merupakan class java yang menampung hasil dari query yang telah berhasil dilakukan. Mengakses data dalam ResultSet dapat dilakukan dengan menggunakan column index dan juga nama column. Sedangkan dalam method findAll diatas menggunakan nama column.

What is List ?

List merupakan interface java yang dimaksudkan untuk memiliki kemampuan menyimpan koleksi data secara dinamis. Hal ini tentu berbeda dengan array dimana koleksi data didalamnya tidaklah dinamis, artinya jumlah data dalam array bersifat tetap alias tidak dapat dimodifikasi lagi. Kesamaan antara List dan array adalah sama-sama hanya dapat menampung data yang tipe datanya sama dan setiap datanya dapat diakses melalui index serta index array dan List sama-sama dimulai dari 0.

Berbagai operasi dapat Anda lakukan terhadap ArrayList seperti berikut:

  • size(), untuk mencari panjang List
  • add(), untuk menambah elemen baru
  • get(), untuk mengambil elemen pada indeks tertentu
  • isEmpty(), untuk memeriksa apakah List kosong atau tidak
  • indexOf(), untuk mengetahui indeks dari suatu nilai
  • contains(), untuk memeriksa apakah suatu nilai ada dalam List
  • set(), untuk menimpa nilai pada indeks tertentu
  • remove(), untuk menghapus nilai pada indeks tertentu

What is ArrayList ?

ArrayList merupakan salah satu class java yang mengimplementasikan interface List. Sehingga fungsi class ini sama dengan List yaitu untuk menampung sejumlah data yang tipe datanya sama secara dinamis.

 

Leave a Reply

Your email address will not be published. Required fields are marked *