(Analisis) Program insert update delete sederhana dijava

Sebelumnya saya pernah ngepost tulisan program insert update delete dijava dan saya cuma kasih sourcecodenya. disini saya akan mencoba ulas bagimana jalan program tersebut(algoritmanya):
pertama kita membuat database untuk tempat penyimpanan data. jadi nanti data yg diketikan ataupun yang dimapilkan semua itu berada di database. dan disini saya memakai mysql karena database ini adalah database jaringan serta free..
karena dijava dikenal konsep MVC(model, view, control). jadi kita buat modelnya dulu. model disini yang saya maksud adalah class yang menggambarkan satu tabel yang ada didalam database.. contoh didatabase ad tabel mahasiswa. dimodel juga terdpat class Mahasiswa.
di tabel mahasiswa ada field nim, nama , alamat. diclass pun sama ada nim, nama , alamat. jdi class tersebut mepresentasikan tabel yg ada didatabase.

package bahrie.entity;

/**
 *
 * @author bahrie
 */
public class Mahasiswa {

    private String nim;
    private String nama;
    private String alamat;

    public String getAlamat() {
        return alamat;
    }

    public void setAlamat(String alamat) {
        this.alamat = alamat;
    }

    public String getNama() {
        return nama;
    }

    public void setNama(String nama) {
        this.nama = nama;
    }

    public String getNim() {
        return nim;
    }

    public void setNim(String nim) {
        this.nim = nim;
    }

    public Mahasiswa() {
    }

    public Mahasiswa(String nim, String nama, String alamat) {
        this.nim = nim;
        this.nama = nama;
        this.alamat = alamat;
    }
}

dalam sourcecode diatas terdapat metode yang berawalan set dan get. metode tersebut adalah mekanisme class java untuk melalukan masukan data dan ambil data dari variable yang ada diclass. ini adalah salah satu prinsip inkapsulasi dijava. jadi tidak sembarng class yang bisa langsung mengisi atau menghapus data yang ada di variable. harus melalui proses setter dan getter untuk mengambil dan mengisi data ke variable yang ad didlam kelas. ini untuk melindungi data yang ada diclass.

class inilah yang nantinya akan menjadi jembatan antara data yang ada didatabase dengan aplikasi yang sedang berjalan. gambarannya begini, data yang diinputkan di aplikasi pertama-tama masuk ke class Mahasiswa, lalu DAO(data akses objek) nya mengambil data dari kelas untuk dimasukkan ke dalam database..
jadi data yang masuk ke database juga harus melalui proses yang benar. ini adalah tahap-tahap standar dijava karena java sudah punya konsep yang stabil. dengan demikian data yang masuk kedalam database bukan dari yang langsung dari aplikasi, tapi diolah dulu dijadikan objek untuk seterusnya dipindahkan ke database. cara ini bukan bermaksud memperlama proses namun dibalik itu semua banyak keuntungan keuntungan dan kemudahan dalam proses selanjutnya.

setelah class yang merepresentasikan table selesai. selanjutnya kita buat Interface. untuk maslah apa itu interface sudah pernah saya bahas dipostingan sebelumnya. interface disini dimksudkan untuk membuat aturan-aturan yang nanti akan di implementasikan oleh class DOA. Interface disini tidak hanya untuk di implementasikan class DAO saja, tapi bisa diimplementasikan oleh class class lain yang mempunyai cara kerja yang sama atau yang mempunyai aturan yang sama. contoh kita mempunyai interface database yang isi metode nya ada insert, update delete. nah interface ini dapat di implementasikan kedalam class DOA untuk Mysql, Oracle, Postgres, ataupun databse lainnya..cuma dalam statemennya yang berbeda.. interface ini nantinya yang akan memudahkan kita untuk memakai konsep polimorfism(merubah bentuk) dalam java. karena dengan interface kita mudah untuk merubah rubah bentuk objek. yang dulunya databsenya mysql, sekrang pengen oracle jadi mudah.. karena sudah ada interfacenya tinggal ganti instansiasinya, yang tadinya ke mysql sekarrng ke oracle.

dalam contoh program yg sdg dianalisis ini interface serta implementasinya dapat dilihat dibawah

interface:

package bahrie.model;

import bahrie.entity.Mahasiswa;
import java.sql.SQLException;
import java.util.List;

/**
 * @author bahrie
 */
public interface DataInterface {

    public void connect() throws SQLException;
    public void disconnect() throws SQLException;
    public List  read() throws SQLException;
    public void insert(Mahasiswa mahasiswa) throws  SQLException;
    public void update(String nim, Mahasiswa mahasiswa) throws SQLException;
    public void delete(String nim) throws SQLException;
    public Mahasiswa read(String nim) throws  SQLException;
}

implementasinya :

package bahrie.model;

import bahrie.entity.Mahasiswa;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * @author bahrie
 */
public class DaoMySql implements DataInterface {

    private String dbHost = "jdbc:mysql://localhost:3306/sisteminformasi";
    private String dbUser = "root";
    private String dbPass = "root";
    private Connection conn;

    public DaoMySql() {
        try {
            try {
                Class.forName("com.mysql.jdbc.Driver").newInstance();
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(DaoMySql.class.getName()).log(Level.SEVERE, null, ex);
            }
        } catch (InstantiationException ex) {
            Logger.getLogger(DaoMySql.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            Logger.getLogger(DaoMySql.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    public DaoMySql(Connection conn) {
        this.conn = conn;
    }

    public void connect() throws SQLException {
        this.conn = DriverManager.getConnection(dbHost, dbUser, dbPass);
    }

    public void disconnect() throws SQLException {
        this.conn.close();
    }

    public List read() throws SQLException {
        Statement st = conn.createStatement();
        String sql = "select *from mahasiswa";
        ResultSet rs = st.executeQuery(sql);
        List list = new ArrayList();
        while (rs.next()) {
            Mahasiswa mhs = new Mahasiswa();
            mhs.setNim(rs.getString("nim"));
            mhs.setNama(rs.getString("nama"));
            mhs.setAlamat(rs.getString("alamat"));
            list.add(mhs);
        }
        return list;
    }

    public void insert(Mahasiswa mahasiswa) throws SQLException {
        String sql = "insert into mahasiswa (nim, nama, alamat) values(?,?,?);";
        PreparedStatement ps = this.conn.prepareStatement(sql);
        ps.setString(1, mahasiswa.getNim());
        ps.setString(2, mahasiswa.getNama());
        ps.setString(3, mahasiswa.getAlamat());
        ps.executeUpdate();
    }

    public void update(String nim, Mahasiswa mahasiswa) throws SQLException {
        String sql = "update mahasiswa set nim=?,nama=?,alamat=? where nim=?";
        PreparedStatement ps = this.conn.prepareStatement(sql);
        ps.setString(1, mahasiswa.getNim());
        ps.setString(2, mahasiswa.getNama());
        ps.setString(3, mahasiswa.getAlamat());
        ps.setString(4, nim);
        ps.executeUpdate();
    }

    public void delete(String nim) throws SQLException {
        String sql = "delete from mahasiswa where nim=?";
        PreparedStatement ps = this.conn.prepareStatement(sql);
        ps.setString(1, nim);
        ps.executeUpdate();
    }

    public Mahasiswa read(String nim) throws SQLException {
        String sql = "select *from mahasiswa where nim = ?";
        PreparedStatement ps = this.conn.prepareStatement(sql);
        ps.setString(1, nim);
        ResultSet rs = ps.executeQuery();
        Mahasiswa mahasiswa = new Mahasiswa();
        while (rs.next()) {
            mahasiswa.setNim(rs.getString("nim"));
            mahasiswa.setNama(rs.getString("nama"));
            mahasiswa.setAlamat(rs.getString("alamat"));
        }
        return mahasiswa;
    }
}

setelah interface dan implementasinya selesai. selanjutnya kita buat viewnya atau GUI nya atau Visualnya : dapat dilihat dibawah visual yang saya buat :
guinya

sebelum kita koding dibalik guinya kita buat dulu tablemodel untuk mempermudah data masuk kedalam tabel yang ad di gui tersebut.
data yang tampil di table GUI tersebut nanti yang ngurusin adalah si tablemodel tersebut. nanti table guinya tinggal panggil aja tuh table model. tabelmodel ini nantinya yang mengurusi berapa jumlah kolom dan row yang dibutuhkan dan nama setiap kolom juga diatur disini dengan cara mengoverride yang sudah ada menjadi nama kolom yang kita inginkan. disini nama kolom-kolomnya dalah nim, nama , dan alamat.
prosesnya sebagai berikut : data yang didalam tabel database diload kedalam list yang ada ditablemodel. lalu list tersebut nanti yang akan dipakai untuk ditampilkan di guinya. kalau data yang ada ditabel database ada 10 row maka list tersebut juga terdapat 10 row dan seterusnya.. untuk kolomnya sudah ditentuin terlebih dahulu karena kita yang buat. untuk tabel ini kita buat 3 kolom karena hanya nim,nama, dan alamat. selanjutnya untuk mengisi kedalam row dan colom kita menggunakan swicth(percabangan didalam java). jadi bila row 1 dan kolom 0 maka yang ditampilin adalah list.get(rowIndex).getNim(); lalu row 1 colom 1 list.get(rowIndex).getNama(); dan row 1 colom 2 list.get(rowIndex).getAlamat();
disini kolom dimulai dari angka nol(0) jadi kalo ada tiga kolom cara menyebutkannya adalah 0,1,2.
lalu setelah itu kita buat nama kolom sesuai yang kita inginkan sengan car override colomname. disourcecode bisa dilihat yang ada tanda @override. caranya juga hampir sama dengan memasukkan data. bedanya disini niliai kembaliannya dalah String atau kumpulan karakter.

dan dibawah inilah sourcecodenya :

package bahrie.model;

import bahrie.entity.Mahasiswa;
import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;

/**
 * @author bahrie
 */
public class TableModelMahasiswa extends AbstractTableModel {

    List list = new ArrayList();

    public TableModelMahasiswa(List list) {
        this.list = list;
    }

    public TableModelMahasiswa() {
    }

    public int getRowCount() {
        return list.size();
    }

    public int getColumnCount() {
        return 3;
    }

    public Mahasiswa select(int index) {
        return list.get(index);
    }

    public Object getValueAt(int rowIndex, int columnIndex) {
        switch (columnIndex) {
            case 0:
                return list.get(rowIndex).getNim();
            case 1:
                return list.get(rowIndex).getNama();
            case 2:
                return list.get(rowIndex).getAlamat();
            default:
                return null;
        }
    }

    @Override
    public String getColumnName(int column) {
        switch (column) {
            case 0:
                return "Nim";
            case 1:
                return "Nama";
            case 2:
                return "Alamat";
            default:
                return null;
        }
    }
}

setelah itu kita masuk ke koding GUInya..disetiap tombol diclik kanan pilih event terus action nanti akan masuk kedalam bagian belakangnya GUInya. untuk tombol tambah, intinya tombol ini yang nantinya akan mengirim data yang ada di teksfield masuk kedalam class Mahasiswa lalu dimasukkan kedlam database. lalu database diambil dimasukkan kedlam class Mahasiswa lagi dan di masukkan kedalam list yang ada didalam tabelmodel dan ditampilkan lagi ke tabel yang ada diGUI.
untuk tombol update juga prinsipnya sama. data yang dipilih lalu masuk kedalam teksfield dan diubah lalu di kirim ke class Mahasiswa dan diupdatekan ke database lalu dari database masuk lagi ke class Mahasiswa dan dimasukan ke tabelmodel dan dipanggil ke GUI untuk ditampilkan.. untuk delete juga. data yang dipilih dibaca primary keynya lalu di hapus dari database. setelah itu databse menuju class Mahasiswa. mahasiswa menuju tabelmodel dan tabelmodel menuju tabel yang ada diGUi untuk ditampilkan. dibawah ini akan saya pisah-pisah sourcecode untuk tiap tombol. untuk pertama kelas gui ini dibuka juga terdapat perintah yang tidak boleh ditinggalkan.

untuk variable dan code yang dibutukan setelah class gui dijalankan :

   
    DataInterface daoMysql = new DaoMySql();
    TableModelMahasiswa tableModelMahasiswa;
    List records = new ArrayList();

    /** Creates new form Contoh */
    public Contoh() {
        initComponents();
        loadData();// ini adlah metode yang saya buat ad dibawah. bisa langsung dipanggil.
    }

    void kosongkanTeks() {
        txtNim.setText("");
        txtNama.setText("");
        txtAlamat.setText("");
    }

    public TableModelMahasiswa getTableModelMahasiswa() {
        return tableModelMahasiswa;
    }

    public void setTableModelMahasiswa(TableModelMahasiswa tableModelMahasiswa) {
        this.tableModelMahasiswa = tableModelMahasiswa;
    }

    void loadData() {
        try {
            daoMysql.connect();
            List list = new ArrayList();
            list = daoMysql.read();
            TableModel tableModel = new TableModelMahasiswa(list);
            tabelMhs.setModel(tableModel);
            daoMysql.disconnect();
        } catch (SQLException ex) {
            Logger.getLogger(Contoh.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

code untuk tombol tambah :

try {
            if (!txtNim.getText().isEmpty()
                    && !txtNama.getText().isEmpty()
                    && !txtAlamat.getText().isEmpty()) {
                // TODO add your handling code here:
                daoMysql.connect();
                Mahasiswa mhs = new Mahasiswa();
                mhs.setNim(txtNim.getText());
                mhs.setNama(txtNama.getText());
                mhs.setAlamat(txtAlamat.getText());
                daoMysql.insert(mhs);

                loadData();
            } else {
                JOptionPane.showMessageDialog(null, "Harus diisi semua", "Salah", JOptionPane.ERROR_MESSAGE);
            }
            this.kosongkanTeks();
        } catch (SQLException ex) {
        }

code untuk tombol update :

 try {
            daoMysql.connect();
            int index = tabelMhs.getSelectedRow();
            if (buttonUptade.getText().equals("Update")) {
                records = daoMysql.read();
                Mahasiswa mahasiswa = records.get(index);
                String nim = mahasiswa.getNim();
                Mahasiswa mhs = daoMysql.read(nim);
                txtNim.setText(mhs.getNim());
                txtNama.setText(mhs.getNama());
                txtAlamat.setText(mhs.getAlamat());
                buttonUptade.setText("Simpan");
            } else {
                Mahasiswa mhs1 = new Mahasiswa();
                mhs1.setNim(txtNim.getText());
                mhs1.setNama(txtNama.getText());
                mhs1.setAlamat(txtAlamat.getText());
                if (JOptionPane.showConfirmDialog(this, "apakah anda yakin untuk melakukan update", "konfirmasi update", JOptionPane.OK_CANCEL_OPTION) == 0) {
                    daoMysql.update(records.get(index).getNim(), mhs1);
                    loadData();
                    this.kosongkanTeks();
                    buttonUptade.setText("Update");
                    JOptionPane.showMessageDialog(this, "Data berhasil di update");
                }
            }
            daoMysql.disconnect();
        } catch (SQLException ex) {
            Logger.getLogger(Contoh.class.getName()).log(Level.SEVERE, null, ex);
        }

code untuk tombol delete :

 int index = tabelMhs.getSelectedRow();
        try {
            if (JOptionPane.showConfirmDialog(this, "apakah anda yakin untuk menghapus data", "konfirmasi penghapusan", JOptionPane.OK_CANCEL_OPTION) == 0) {
                daoMysql.connect();
                records = daoMysql.read();
                daoMysql.delete(records.get(index).getNim());
                JOptionPane.showMessageDialog(this, "data berhasil di hapus");
            }
            loadData();

        } catch (SQLException ex) {
         Logger.getLogger(Contoh.class.getName()).log(Level.SEVERE, null, ex);
            JOptionPane.showMessageDialog(null, "data belum dipilh", "error", JOptionPane.ERROR_MESSAGE);
        }

cukup disini pembahasan dari saya, bila ada yang ingin ditanyakan atau ata saran/kritik bisa tullis dikoment. terimaksih.. 🙂
Alhamdulillah akhirnya saya tulis juga analisisnya.hehehe

silahkan download sourcenya

http://bahrie127.googlecode.com/files/crudsederhana.zip

17 Komentar (+add yours?)

  1. didin
    Des 03, 2010 @ 10:52:37

    weh sip, bisa utk ++ilmu. krn ku masih newbi bgt ttg java. oiya aku sdh coba create project & copas semua script yg ada di atas. tp ada error. kalau boleh minta project yg sdh jadi boleh g?? di posting sekalian dech file project-nya, atau kirim via email ke emailku y…thx
    be the best

    Balas

    • bahrie-___-
      Des 03, 2010 @ 11:41:51

      saya tidak posting file projectnya supaya yg baca mencoba dulu, setelah itu kalo butuh minta aja.. 🙂 nanti saya coba cari.. kemaren partisi tempat file keformat karena sering gonta ganti OS..hehe mudah mudahan masih ada di backup.. 🙂 selalu semangat..

      Balas

  2. didin
    Des 04, 2010 @ 12:08:00

    ok dech, krn aku sangat penasaran dg aplikasi database-nya java yg sangat ribet 🙂 krn slama ini pake vb sangat gampang. letak kesalahan yg sy coba itu ada di TableModelMahasiswa baris =>
    public Mahasiswa select(int index) {
    return list.get(index);
    }
    ==> ada pesan incompatible type

    yg akhirnya mengakitbatkan pd baris bawahnya yaitu
    public Object getValueAt(int rowIndex, int columnIndex) {
    bla…. bla… bla….
    }
    ==>> ada pesan cannot find symbol Metod getnim()

    kalau perkiraan sy mungkin ada coding yg hilang pd Mahasiswa.java pd baris
    public Mahasiswa() {
    }

    mungkin lho…..

    Balas

  3. bahrie-___-
    Des 07, 2010 @ 01:13:37

    ini mas sudah saya upload disini http://bahrie127.googlecode.com/files/crudsederhana.zip
    maaf lama, coz kamren lagi sibuk.
    saya ketik ulang karena file yg di hardisk blum ketemu..hehehe

    ternyata emang ada yang error dari source diatas.. untuk variable list yg salah
    seharusnya List list=new ArrayList();
    akan saya perbaiki.. 🙂 thanks atas koreksinya..

    Balas

  4. Trackback: Program insert update delete sederhana menggunakan java « Coretan Seorang Hamba
  5. didin
    Des 18, 2010 @ 09:22:58

    setelah sy mempelajari aplikasi crud yg anda buat, dilihat dr struktur programingnya mmg kliatane jauh lebih secure & stabil. tp yg jd pertanyaan, jika kita punya 50 table dlm 1 database, apakah kita jg harus membuat 50 pakage entitas ??

    Balas

    • bahrie-___-
      Des 18, 2010 @ 11:04:11

      hehehe.. aplikasi crud yang saya contohkan disini hanya untuk latihan algoritmanya aja koq.. kalo ingin membuat aplikasi yg lbh besar algoritma dari ini harus dikembangkan lagi.. ya jelas tidak harus membuat 50paket. tetep satu paket namun didalamnya terdapat 50class, nanti kelas koneksinya juga cuman satu. dan bila terlalu lama untuk membuat 50class untuk mewakili 50table. kita bisa menggukanan persistence untuk membuat class scara otomatis dari database.. contoh perpustakaan mini yg pernah saya posting sudah menggunakan lbh dari satu table. mgkn bisa dipelajari dan dikoreksi2 dulu.. :). gak susah koq koreksinya, nanti buka aja pake daonya.. semua kelas yang berhubungan dengan model saya taruh di paket dao.. 😀

      Balas

  6. Trackback: Sourcecode Maupun Tutorial yang dapat di Download « Coretan Seorang Hamba
  7. Z. Andri
    Jan 10, 2012 @ 22:47:49

    Bagus niy
    Tapi kalau sudah ngerti prinsipnya sebaiknya beralih ke ORM seperti Hibernate, iBatis, atau yang sudah standar seperti JPA.

    Balas

  8. dinaavip
    Jun 26, 2012 @ 20:00:19

    tolong jelasin tentang tombol delete dong,,

    Balas

  9. denias9301
    Sep 07, 2012 @ 12:41:17

    makasih mas ats codungnya, sangat membantu. mau tanya gimana cara buat exception supaya kita gk memasukkan primary key yg udah ada 🙂

    Balas

  10. ipin
    Okt 08, 2012 @ 13:16:51

    di entity mahasiswa kok ada public Mahasiswa(String nim, String nama, String alamat) {
    this.nim = nim;
    this.nama = nama;
    this.alamat = alamat;
    }
    method itu untuk apa y mas?aq masih bingung soalnya aq lihat dari punyanya khannedy g pake jadi bingung. terima kasih buat jawabannya

    Balas

    • bahrie
      Okt 08, 2012 @ 14:16:21

      itu nama nya konstruktor, pake gak apa2, gak pake juga gak apa2.. 😀 lagian bikinnya juga gak susah.. itu di generate sama netbeans 😀

      Balas

  11. Prima Negara
    Jul 31, 2014 @ 16:20:07

    Gan… di dalem tombol “buttonUptadeActionPerformed”, tolong dong, buatin cara menampilkan record Jenis kelamin ke Radio Button, soalnya yg agan buat hanya menampilkan ke Textbox aja…

    tolong bantuannya secepatnya… pakek UAS..

    Thanks…..

    Balas

Tinggalkan Balasan ke denias9301 Batalkan balasan