Membuat aplikasi CRUD menggunakan Java Swing dan MySQL Part 3

Pada kesempatan kali ini, penulis akan melanjutakan tutorial yang sebelumnya baru sampai pada tahap persiapan database connector dan operasi-operasi CRUD yang nantinya akan digunakan. Untuk dapat mengikuti tutorial ini, anda harus sudah menyelesaikan semua tahap pada tutorial part 2. Hal ini karena pada part ini, penulis akan memberikan tutorial pembuatan GUI-nya dan cara menggunakan class-class yang sudah dibuat sebelumnya dalam GUI java yaitu Swing.

1. Apa Itu Swing ?

Swing Merupakan API (Application Programming Interface) yang menyediakan Graphical User Interface (GUI) untuk program Java dan applet. Dengan dah Swing, kita dapat membuat GUI yang nantinya akan memudahkan pengguna aplikasi dalam mengoperasikan aplikasi.

2. Membuat Form Input

Sebelum memulai membuat design tampilan dari aplikasi, sebelumnya buatlah package baru dan beri nama ui, seperti yang nampak pada gambar dibawah ini :

Didalam package ui tersebut buatlah JFrame baru dengan nama FormBukuActivity, hasilnya seperti yang tampak pada gambar dibawah ini :

Untuk mulai mendesign tampilan ui-nya, anda dapat menarik setiap komponen yang anda butuhkan dari jendela palette netbeans seperti yang tampak pada gambar di bawah ini :

Sekarang buatlah design FormBukuActivity menjadi seperti yang tampak seperti dibawah ini :

Sekarang klik kanan pada kolom isian judul(JTextField) dan pilih change variable name sehingga muncul kotak dialog seperti dibawah ini :

Isikan kolom New Name menjadi judulField sehingga menjadi seperti yang tampak pada gambar dibawah ini :

Lakukan hal yang sama pada komponen terhadap komponen-komponen lainnya dengan ketentuan dibawah ini :

  1. JTextField pengarang nama variabelnya menjadi pengarangField.
  2. JLabel judul nama variabelnya menjadi titleActivity
  3. JRadioButton yudhistira nama variabelnya menjadi yudhistiraRb
  4. JRadioButton airlangga nama variabelnya menjadi airlanggaRb
  5. JRadioButton gramedia nama variabelnya menjadi gramediaRb
  6. JRadioButton yang lain nama variabelnya menjadi ygLainRb
  7. JComboBox tahun terbit nama variabelnya menjadi tahunTerbitCb
  8. JButton simpan nama variabelnya menjadi saveBtn
  9. JButton batal nama variabelnya menjadi cancelBtn

Jika sudah, maka pada jendela navigator akan tampak menjadi seperti dibawah ini :

 

Sekarang tambahkan komponen JButtonGroup ke design FormBukuActivity, komponen bukanlah komponen yang dapat dilihat pada design jadi untuk memastikan anda sudah menambahkan komponen tersebut dapat dilihat pada jendela navigator. Untuk lebih jelasnya anda dapat melihat gambar di bawah ini :

Sekarang masukkan setiap komponen JRadioButton yang kita punya kedalam JButtonGroup tersebut, caranya dapat dilihat melalui gambar dibawah ini :

Seperti yang terlihat diatas, pilih semua JRadioButton lalu ganti nilai properties buttonGroup menjadi buttonGroup1. Jika sudah sudah berhasil maka selesai sudah design FormBukuActivity.

3. Menyiapkan FormBukuActivity Event

FormBukuActivity merupakan form input yang nantinya akan digunakan untuk 2 kegiatan, yaitu untuk kegiatan penambahan data baru(Create) dan juga perubahan data(Update). Klik tab source seperti yang tampak pada gambar dibawah ini :

Ketikkan code ini dibawah deklarasi package :

package com.dika.ui;

import com.dika.database.BukuDatasource;
import com.dika.model.Buku;
import java.sql.SQLException;
import javax.swing.JOptionPane;

Sehingga kodenya menjadi seperti dibawah ini :

Kemudian ketikkan kode dibawah ini tepat dibawah constructor class dari FormBarangActivity :

    private Buku buku;
    
    private void showError(String message) {
        JOptionPane.showMessageDialog(this, message, "Error", JOptionPane.ERROR_MESSAGE);
    }

    private void showSucceed(String message) {
        JOptionPane.showMessageDialog(this, message, "Sukses", JOptionPane.INFORMATION_MESSAGE);
    }

    private void showOldDataOf(Buku buku) {
        judulField.setText(buku.getJudulBuku());
        pengarangField.setText(buku.getPengarang());

        String penerbit = buku.getPenerbit();
        switch (penerbit) {
            case "Yudhistira": yudhistiraRb.setSelected(true);break;
            case "Gramedia":gramediaRB.setSelected(true);break;
            case "Airlangga":airlanggaRB.setSelected(true);break;
            default:ygLainRb.setSelected(true);break;
        }
        
        tahunTerbitCb.setSelectedItem(String.valueOf(buku.getTahunTerbit()));
    }

    public void setBuku(Buku buku) {
        this.buku = buku;
        showOldDataOf(buku);
    }

    private String getSelectedPenerbit() {
        if (yudhistiraRb.isSelected()) {
            return "Yudhistira";
        } else if (gramediaRB.isSelected()) {
            return "Gramedia";
        } else if (airlanggaRB.isSelected()) {
            return "Airlangga";
        } else if (ygLainRb.isSelected()) {
            return "Yang Lain";
        } else {
            return "";
        }
    }

    private boolean validateAllInput() {
        String judul = judulField.getText();
        if (judul.isEmpty()) {
            showError("Judul buku masih kosong");
            return false;
        }
        String pengarang = pengarangField.getText();
        if (pengarang.isEmpty()) {
            showError("Pengarang buku masih kosong");
            return false;
        }
        String penerbit = getSelectedPenerbit();
        if (penerbit.isEmpty()) {
            showError("Penerbit belum ada yang dipilih");
            return false;
        }
        String tahunTerbit = tahunTerbitCb.getSelectedItem().toString();
        if (tahunTerbit.isEmpty()) {
            showError("Tahun terbit belum ada yang dipilih");
            return false;
        }

        return true;
    }

    private void collectDataFor(Buku buku) {
        String judul = judulField.getText();
        String pengarang = pengarangField.getText();
        String penerbit = getSelectedPenerbit();
        String tahunTerbit = tahunTerbitCb.getSelectedItem().toString();
      
        buku.setJudulBuku(judul);
        buku.setPengarang(pengarang);
        buku.setPenerbit(penerbit);
        buku.setTahunTerbit(Integer.parseInt(tahunTerbit));
    }
    
    private void saveNewData() {
        buku = new Buku();
        collectDataFor(buku);
        
        BukuDatasource datasource = new BukuDatasource();
        try {
            datasource.save(buku);
            showSucceed("Data buku berhasil disimpan");
        } catch (SQLException e) {
            showError("Data buku gagal disimpan");
            e.printStackTrace();
        }
    }
    
    private void updateData() {
        collectDataFor(buku);
        
        BukuDatasource datasource = new BukuDatasource();
        try {
            datasource.update(buku);
            showSucceed("Data buku berhasil diperbaharui");
        } catch (SQLException e) {
            showError("Data buku gagal diperbaharui");
            e.printStackTrace();
        }
    }
    
    private void simpan() {
        if (!validateAllInput()) {
            return;
        }
        
        if (buku != null) {
            updateData();
        } else {
            saveNewData();
        }
    }

    @Override
    public void setTitle(String title) {
        super.setTitle(title); //To change body of generated methods, choose Tools | Templates.
        titleActivity.setText(title);
    }

Keterangan :

  1. Method showError digunakan untuk menampilkan dialog peringatan bahwa ada masalah pada saat suatu aksi dilakukan.
  2. Method showSucceed digunakan untuk menampilkan dialog info bahwa  suatu aksi telah berhasil dilakukan.
  3. Method showOldDataOf digunakan untuk menampilkan data lama dari buku yang akan diperbaharui datanya.
  4. Method setBuku digunakan untuk menerima data buku yang akan diperbaharui datanya.
  5. Method  getSelectedPenerbit digunakan untuk megambil pilihan penerbit dari pengguna aplikasi.
  6. Method validateAllInput digunakan untuk memvalidasi input dari pengguna aplikasi.
  7. Method collectDataFor digunakan untuk mengumpulkan input data buku dari pengguna aplikasi ke dalam sebuah object buku.
  8. Method saveNewData digunakan untuk menyimpan data buku baru ke dalam database.
  9. Method updateData digunakan untuk memperbaharui data buku dalam database.
  10. Method simpan digunakan sebagai aksi dari button simpan saat button tersebut diklik.

Sekarang kembali ke tab design dan beri aksi klik pada kedua button, baik itu button simpan maupun button cancel. Untuk lebih jelasnya lihat gambar dibawah ini :

Untuk memberi aksinya, kembali ke tab source dan ubah menjadi seperti ini :

Lakukan hal yang sama pada button cancel, hanya saja untuk aksinya menjadi seperti dibawah ini :

Sekarang edit properties defaultCloseOperation pada  JFrame menjadi seperti apa yang tampak pada gambar dibawah ini :

4. Menyiapkan Form Data Manager Buku

Buatlah JFrame baru di dalam package ui dan beri namanya sebagai DataManagerBuku, lalu design seperti gambar dibawah ini :

Ubah nama variabel untuk komponen-komponen dibawah ini :

  1. JTable nama variabelnya menjadi tableBarang
  2. JButton tambah nama variabelnya menjadi addBtn
  3. JButton update nama variabelnya menjadi updateBtn
  4. JButton hapus nama variabelnya menjadi deleteBtn
  5. JButton tutup nama variabelnya menjadi closeBtn

Sehingga pada jendela navigator akan tampak seperti pada gambar dibawah ini :

Ketikkan code ini dibawah deklarasi package :

package com.dika.ui;

import com.dika.database.BukuDatasource;
import com.dika.model.Buku;
import java.awt.Window;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.sql.SQLException;
import java.util.List;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

Ketikkan kode dibawah ini tepat dibawah constructor data DataManagerBuku :

    /**
     * Creates new form DataManagerBuku
     */
    public DataManagerBuku() {
        initComponents();
        
    }

    private DefaultTableModel tableModel;
    private List<Buku> bukuList;

    private void showError(String message) {
        JOptionPane.showMessageDialog(this, message, "Error", JOptionPane.ERROR_MESSAGE);
    }

    private void showSucceed(String message) {
        JOptionPane.showMessageDialog(this, message, "Sukses", JOptionPane.INFORMATION_MESSAGE);
    }

    private void initTableModel() {
        String[] columns = new String[]{"ID Buku", "Judul", "Pengarang", "Penerbit", "Tahun Terbit"};
        tableModel = new DefaultTableModel(columns, 0);
        tableBarang.setModel(tableModel);
    }

    private void addRowToTableFor(Buku buku) {
        tableModel.addRow(new Object[]{
            buku.getId(),
            buku.getJudulBuku(),
            buku.getPengarang(),
            buku.getPenerbit(),
            buku.getTahunTerbit(),
        });
    }

    private void addRowsToTableFor(List<Buku> bukuList) {
        for (Buku buku : bukuList) {
            addRowToTableFor(buku);
        }
    }

    private void loadDataBuku() {
        BukuDatasource datasource = new BukuDatasource();

        if (tableModel.getRowCount() > 0) {
            tableModel.setRowCount(0);
        }

        try {
            bukuList = datasource.findAll();
            addRowsToTableFor(bukuList);
        } catch (SQLException e) {
            showError("Tidak dapat memuat data buku");
            e.printStackTrace();
        }
    }
    
    private void open(Window activity) {
        activity.setLocationRelativeTo(this);
        activity.setVisible(true);
        activity.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosed(WindowEvent e) {
                super.windowClosed(e); //To change body of generated methods, choose Tools | Templates.
                loadDataBuku();
            }
        });
    }

    private void startAddBukuActivity() {
        FormBukuActivity activity = new FormBukuActivity();
        activity.setTitle("Tambah Data Buku");
        open(activity);
    }

    private void startUpateBukuActivity() {
        int selectedRow = tableBarang.getSelectedRow();
        if (selectedRow < 0) {
            showError("Tidak ada data buku terpilih dalam tabel");
            return;
        }

        Buku selectedBuku = bukuList.get(selectedRow);
        FormBukuActivity activity = new FormBukuActivity();
        activity.setTitle("Update Data Buku");
        activity.setBuku(selectedBuku);
        open(activity);
    }
    
    private void deleteBuku() {
        int selectedRow = tableBarang.getSelectedRow();
        if (selectedRow < 0) {
            showError("Tidak ada data buku terpilih dalam tabel");
            return;
        }

        Buku selectedBuku = bukuList.get(selectedRow);
        int confirm = JOptionPane.showConfirmDialog(this, "Yakin Hapus"+selectedBuku.getJudulBuku()+" ?");
        if (confirm == JOptionPane.YES_OPTION) {
            BukuDatasource datasource = new BukuDatasource();
            try {
                datasource.delete(selectedBuku);
                tableModel.removeRow(selectedRow);
                bukuList.remove(selectedBuku);
                showSucceed("Data buku berhasil dihapus");
            } catch (SQLException e) {
                showSucceed("Data buku gagal dihapus");
                e.printStackTrace();
            }
        }
    }

Keterangan :

  1. Method showError digunakan untuk menampilkan dialog peringatan bahwa ada masalah pada saat suatu aksi dilakukan.
  2. Method showSucceed digunakan untuk menampilkan dialog info bahwa  suatu aksi telah berhasil dilakukan.
  3. Method initTableModel digunakan untuk mendefenisikan kolom didalam table.
  4. Method addRowToTableFor digunakan untuk menambah satu data buku ke dalam table.
  5. Method addRowsToTableFor digunakan untuk menambah sejumlah data buku ke dalam table.
  6. Method loadDataBuku digunakan untuk mengambil data buku dari database dan menampilkannya pada table.
  7. Method open digunakan untuk menampilkan Window lain.
  8. Method startAddBukuActivity digunakan untuk membuka FormBukuActivity dan mengatur aktivitasnya menjadi tambah data baru.
  9. Method startUpateBukuActivity digunakan untuk membuka FormBukuActivity dan mengatur aktivitasnya menjadi update data.
  10. Method deleteBuku digunakan untuk menghapus data buku dari database.

Sekarang modifikasi constructornya menjadi seperti dibawah ini :

    /**
     * Creates new form DataManagerBuku
     */
    public DataManagerBuku() {
        initComponents();
        initTableModel();
        loadDataBuku();
    }

Sekarang beri aksi klik pada masing JButton, yang aksinya dijelaskan melalui gambar dibawah ini :

Terakhir edit properties title pada JFrame menjadi seperti dibawah ini :

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.

 

Membuat aplikasi CRUD menggunakan Java Swing dan MySQL Part 1

Hari ini penulis akan membahas bagaimana cara membuat aplikasi java dengan menggunakan teknik CRUD. Adapun peralatan atau aplikasi yang digunakan dalam tutorial ini adalah sebagai berikut :

  • Netbeans IDE versi 8.2,  link unduh : ,
  • XAMPP versi 7.1.7, link unduh :

Apa itu CRUD ?

CRUD sendiri merupakan kepanjangan dari Create,  Update, Read, dan Delete. Teknik ini dilakukan dengan cara mengeksekusi query tertentu ke database mysql.

  • Create, dilakukan dengan mengeksekusi query CREATE. Query ini dimaksudkan untuk menyimpan data ke dalam MySQL.
  • Update, dilakukan dengan mengeksekusi query UPDATE. Query ini dimaksudkan untuk melakukan perubahan data yang sudah pernah tersimpan sebelumnya di database MySQL.
  • Read, dilakukan dengan mengeksekusi query SELECT. Query ini dimaksudkan untuk melakukan pengambilan data dari database MySQL.
  • Delete, dilakukan dengan mengeksekusi query DELETE. Query ini dimaksudkan untuk menghapus salah satu atau lebih data yang sudah tersimpan dalam database MySQL.

Itulah sepintas teori mengenai apa yang dimaksud dengan CRUD.

Apa Itu Netbeans IDE ?

Netbeans IDE adalah aplikasi yang dapat digunakan dalam membangun sebuah aplikasi berbasis java. Kenapa harus menggunakan Netbeans IDE ?, hal ini dikarenakan akan Netbeans IDE memberikan kemudahan dalam membuat GUI(Graphical User Interface) untuk aplikasi Java Desktop, adapun GUI yang penulis maksud adalah penggunaan Java Swing.

Apa Itu XAMPP ?

adalah perangkat lunak bebas, yang mendukung banyak sistem operasi, merupakan kompilasi dari beberapa program.

Fungsinya adalah sebagai server yang berdiri sendiri (localhost), yang terdiri atas program Apache HTTP Server, MySQL database, dan penerjemah bahasa yang ditulis dengan bahasa pemrograman PHP dan Perl. Nama XAMPP merupakan singkatan dari X (empat sistem operasi apapun), Apache, MySQL, PHP dan Perl. Program ini tersedia dalam GNU General Public License dan bebas, merupakan web server yang mudah digunakan yang dapat melayani tampilan halaman web yang dinamis. Untuk mendapatkanya dapat mendownload langsung dari web resminya.

Lets Start Prepare Our Database !!!

Install semua aplikasi yang telah sebutkan sebelumnya. Penulis berasumsi bahwa pembaca sudah paham betul bagaimana cara menginstall aplikasi tersebut. Setelah aplikasi terinstall, jalankan apache server dan juga mysql dengan seperti dibawah ini :

  • GNU/Linux OS, untuk menjalankan XAMPP di OS ini dapat dilakukan dengan cara membuka terminal dan ketikkan code dibawah ini :
~$ sudo /opt/lampp/lampp start
  • Windows OS, untuk menjalankan XAMPP di OS ini dapat dilakukan dengan cara membukan XAMPP control panel dan klik tombol start pada Apache dan MySql. Seperti yang tampak dibawah ini  :

Untuk memastikan XAMPP sudah berjalan, buka web browser favorit anda dan ketikkan ini : http://localhost/, jika memang sudah jalan maka anda akan melihat halaman berikut ini pada browser anda :

Jika memang anda sudah berhasil melihat halaman page diatas, langkah selanjutnya adalah klik phpMyAdmin pada menu page localhost tersebut :

Klik new pada navigasi page phpMyAdmin, seperti yang tampak gambar dibawah ini. Hal ini dilakukan untuk membuat database baru :

Kemudian isikan nama database menjadi rumah_coding, seperti yang tampak pada gambar dibawah ini dan klik create.

Pastikan sekarang anda dapat melihat database baru dengan nama rumah_coding pada panel navigasi phpMyAdmin. Lihat gambar dibawah ini :

Jika anda sudah database pilih database tersebut dan buat table baru dengan nama buku dan isikan jumlah kolom menjadi 5 lalu klik go, lihat gambar dibawah ini :

Selanjutnya edit masing properti kolom tersebut menjadi seperti dibawah ini :

Jika sudah, klik tombol save pada bagian kanan bawah, lihat gambar dibawah ini untuk lebih jelasnya :

Jika berhasil maka anda akan melihat sekarang database kita telah memiliki tabel baru seperti yang tampak pada gambar dibawah ini :

 

Read more