Mudahnya membuat Aplikasi CRUD di Java dg database MySQL

Sebenarnya, sebelumnya saya pernah menulis tentang membuat aplikasi crud menggunakan java, namun yang tulis dulu itu codenya terlalu panjang dan bila dikembangkan menggunakan banyak tabel akan terasa sedikit sulit, dan sekang yang ingin saya share adalah menggunakan code baru, yang lebih sedikit class nya dan lebih ringkas codenya. nanti bisa dilhat sendiri betapa mudah dan ringkasnya kode yg saya buat serta mudah untuk dipahami.. dan yang tidak kalah penting, dalam aplikasi ini sudah mengcakup konsep MVC atau model, view, control sehingga dapat di bedakan mana yang bertugas untuk view, control dan yang mengurusi keluar masuknya data dari dan ke database. hehee..

dibawah ini tampilan antarmukanya..

antarmuka
antarmuka

pertama yang kita buat adalah databasenya. disini saya membuat database dengan nama sisteminformasi dan terdapat satu tabel yaitu tabel mahasiswa. bagi yang sudah terbiasa dengan mysql saya yakin tidak sulit untuk membuat database ini. πŸ˜€

CREATE TABLE mahasiswa (
  `nim` varchar(8) NOT NULL,
  `nama` varchar(40) NOT NULL,
  `alamat` varchar(50) NOT NULL,
  PRIMARY KEY (`nim`)
) ;

setelah itu kita buat project di netbeans dengan nama crudjava. lalu buat package untuk menampung class koneksi supaya mudah bacanya. dibawah ini code koneksi yang saya buat.. jangan lupa sebelumnya harus sudah memasukkan library mySQL jdbc connector.

package crudjava.koneksi;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

public class DatabaseUtilities {

    private static Connection conn;

    public static Connection getConnection(){
        if(conn==null){
            try {
                DriverManager.registerDriver(new com.mysql.jdbc.Driver());
                conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/sisteminformasi","root","root");
//db nya sisteminformasi, usernya root, dan passwordnya root
            } catch (SQLException ex) {
                Logger.getLogger(DatabaseUtilities.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return conn;
    }
}


untuk hirarki projectnya dapat dilihat dibawah.. πŸ˜€


project
Project

lalu setelah kita buat koneksi, kita buat class yang merepresentasikan tabel yang ada di database. atau istilahnya adalah POJO (Plain Old Java Object ). karena di database nama tabelnya mahasiswa, jadi diproject saya juga beri nama classnya Mahasiswa dan saya letakkan di dalam package entity.

package crudjava.entity;

public class Mahasiswa {

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

    public Mahasiswa() {
    }

    public Mahasiswa(String nim, String nama, String alamat) {
        this.nim = nim;
        this.nama = nama;
        this.alamat = 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;
    }
}

setelah class Mahasiswa saya membuat Interface dengan nama InterMahasiswa, fungsi interface bisa dicari di google. dan saya juga pernah memposting apa bedanya interface dengan abstract. mungkin bisa dibaca-baca..hehe. bagi saya interface itu adalah aturan awal yang harus dibuat untuk dipatuhi dalam membuat crud(create, read, update, delete) yang nantinya di implement ke class yang berfungsi sebagai control. kenapa harus di buat interface, itu karena bila nanti kita ingin merubah class control dari mysql ke oracle atau postgre, class yang baru yang menuju oracle tinggal implement ke interface, dengan begitu class mysql oracle ataupun yang lainnya memiliki aturan yang sama. karena implement dari satu interface.. wah panjang juga ya..hehee , oke dibawah ini code untuk interfacenya.

package crudjava.interfc;

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

public interface InterMahasiswa {

    Mahasiswa insert(Mahasiswa o) throws SQLException;

    void update(Mahasiswa o) throws SQLException;

    void delete(String nim) throws SQLException;

    List getAll() throws SQLException;
}
setelah membuat interface, kita buat class yang mengimplement interface yang nanti isinya adalah coding insert update delete read. dan disini saya beri nama ImpleMahasiswa.
package crudjava.implement;

import crudjava.entity.Mahasiswa;
import crudjava.interfc.InterMahasiswa;
import crudjava.koneksi.DatabaseUtilities;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

public class ImpleMahasiswa implements InterMahasiswa{

    public Mahasiswa insert(Mahasiswa o) throws SQLException {//untuk insert ke database
        PreparedStatement st=DatabaseUtilities.getConnection().prepareStatement("insert into mahasiswa values(?,?,?)");
        st.setString(1, o.getNim());
        st.setString(2, o.getNama());
        st.setString(3, o.getAlamat());
        st.executeUpdate();
        return o;
    }

    public void update(Mahasiswa o) throws SQLException {//untuk update ke database
        PreparedStatement st=DatabaseUtilities.getConnection().prepareStatement("update mahasiswa set nama=?,alamat=? where nim=?");
        
        st.setString(1, o.getNama());
        st.setString(2, o.getAlamat());
        st.setString(3, o.getNim());
        st.executeUpdate();
    }

    public void delete(String nim) throws SQLException {// untuk delete berdasarkan nim
        PreparedStatement st=DatabaseUtilities.getConnection().prepareStatement("delete from mahasiswa where nim=?");
        st.setString(1, nim);
        st.executeUpdate();
    }

    public List getAll() throws SQLException { // untuk read all, jadi semua data diambil dan ditampilkan
        Statement st=DatabaseUtilities.getConnection().createStatement();
        ResultSet rs=st.executeQuery("select * from mahasiswa");
        Listlist=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;
    }

}

setelah implement jadi, skrng kita tinggal membaut form untuk input dan output. dengan desaign seperti diatas. dan saya beri nama FormUtama.
koding dibelakang nya seperti ini :
dibawah ini adalah coding yang butuhkan sebelum memberikan kode pada tombol tambah, ubah, hapus.

 List record=new ArrayList();//untuk menampung getAll()
    InterMahasiswa mhsServis;//untuk membuat objek dari class implement mahasiswa
    int row;//untuk membantu dalam menampilkan data di textfield nim nama alamat.
    /** Creates new form FormUtama */
    public FormUtama() {
        
            initComponents();
            mhsServis = new ImpleMahasiswa();
           
//supaya kalo data di table di klik maka data akan muncul langsung di textfield nim nama alamat
            jTable1.getSelectionModel().addListSelectionListener(new ListSelectionListener() {

                public void valueChanged(ListSelectionEvent e) {
                    row=jTable1.getSelectedRow();
                    if(row!=-1){
                        isiText();
                    }
                }
            });
            this.statusAwal();
       
    }
//untuk meload semua data yg ada di tabel mahasiswa ke dalam aplikasi ketika dibuka
    void loadData(){
        try {
            record = mhsServis.getAll();
        } catch (SQLException ex) {
            Logger.getLogger(FormUtama.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
//untuk mengurusi table yang ada di antarmuka. supaya mempunya judul nim, nama, alamat, serta dengan isinya yang //selalu update.
    void isiTabel(){
        Object data[][]=new Object[record.size()][3];
        int x=0;
        for(Mahasiswa mhs:record){
            data[x][0]=mhs.getNim();
            data[x][1]=mhs.getNama();
            data[x][2]=mhs.getAlamat();
            x++;
        }
        String judul[]={"nim","nama","alamat"};
        jTable1.setModel(new DefaultTableModel(data, judul));
        jScrollPane1.setViewportView(jTable1);
    }
//coding untuk isi text ke dalam textfield nim nama alamat
    void isiText(){
        Mahasiswa mhs=record.get(row);
        txtNim.setText(mhs.getNim());
        txtNama.setText(mhs.getNama());
        txtAlamat.setText(mhs.getAlamat());
    }
//untuk mengosongkan text bila setelah tambah data atau yang lainnya
    void kosongkanText(){
        txtNim.setText("");
        txtNama.setText("");
        txtAlamat.setText("");
    }
//untuk menyatukan method2 yang kita buat diatas supaya dapat berjalan secara teratur dan memanggilnya dengan //mudah.
    void statusAwal(){
        kosongkanText();
        loadData();
        isiTabel();
    }

nah yang dibawah ini adalah isi dari tombol2nya.

//tombol tambah
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        try {
            // TODO add your handling code here:
            Mahasiswa mhs = new Mahasiswa();
            mhs.setNim(txtNim.getText());
            mhs.setNama(txtNama.getText());
            mhs.setAlamat(txtAlamat.getText());
            mhsServis.insert(mhs);
            this.statusAwal();
            JOptionPane.showMessageDialog(this, "data tersimpan");
        } catch (SQLException ex) {
            Logger.getLogger(FormUtama.class.getName()).log(Level.SEVERE, null, ex);
        }
    }                                        
//tombol ubah
    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        try {
            // TODO add your handling code here:
            Mahasiswa mhs = new Mahasiswa();
            mhs.setNim(txtNim.getText());
            mhs.setNama(txtNama.getText());
            mhs.setAlamat(txtAlamat.getText());
            mhsServis.update(mhs);
            this.statusAwal();
            JOptionPane.showMessageDialog(this, "data berhasil diubah");
        } catch (SQLException ex) {
            Logger.getLogger(FormUtama.class.getName()).log(Level.SEVERE, null, ex);
        }
    }                                        
//tombol delete
    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        try {
            // TODO add your handling code here:
            String nim = txtNim.getText();
            mhsServis.delete(nim);
            this.statusAwal();
            JOptionPane.showMessageDialog(this, "data berhasil dihapus");
        } catch (SQLException ex) {
            Logger.getLogger(FormUtama.class.getName()).log(Level.SEVERE, null, ex);
        }
    }          

dan dibawah ini isi untuk class main nya..

public class Main {
  
    public static void main(String[] args) {
        try {
            // TODO code application logic here
            UIManager.setLookAndFeel(new NimbusLookAndFeel());
            SwingUtilities.invokeLater(new Runnable() {

                public void run() {
                    FormUtama form = new FormUtama();
                    form.setLocationRelativeTo(null);
                    form.setVisible(true);
                }
            });
        } catch (UnsupportedLookAndFeelException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

}

dengan coding yang sebelumnya, saya rasa lebih ringkas coding ini. πŸ™‚
selamat mencoba.. untuk MVC nya bisa dicari sendiri. bila sudah memahami coding ini maka akan ditemukan mana MVCnya..hehehe, silahkan chat bila ada yang ingin ditanyakan, atau sharing sama2.. πŸ™‚

oh ya, projectnya dapat di donwnload disini..

http://bahrie127.googlecode.com/files/crudjava-java.zip

53 Komentar (+add yours?)

  1. Trackback: Sourcecode Maupun Tutorial yang dapat di Download « Coretan Seorang Hamba
  2. Trackback: Membuat Aplikasi CRUD Java dengan Database Oracle « Coretan Seorang Hamba
  3. Idris
    Apr 26, 2011 @ 12:52:15

    Terimakasih atas tutorialnya,
    kalau nambahin pagingnya, gimana om di jTable1 ?

    Balas

    • bahrie-___-
      Apr 26, 2011 @ 13:47:44

      oh. klik jtable nya masuk ke properties di samping kanan. lalu masuk ke menu model. disana bisa ubah page serta namanya..
      ato kalo lewat kode, tinggal tambah aja di String[] judul. dan di Objek[][] di tambah aray yg keduanya. πŸ˜€ jadi yg tadinya [][3] menjadi [][4] πŸ˜€

      Balas

  4. Idris
    Apr 26, 2011 @ 14:58:43

    Kagak keluar boss, kalo datanya udah banyak, yang muncul cuma scrollup/down, gak ada previous dan next, maklum newbie neh

    Balas

    • bahrie-___-
      Apr 26, 2011 @ 18:50:56

      maksudnya gimana?? kan emang bener. kalo datanya banyak tabelnya scroll atas bawah.
      pengennya pake yang kaya gimana?
      ato pengennya kaya punyanya delphi?? yang next previous.? saya blum pernah buat yg kaya gitu. coz saya rasa scroll keatas kebawah lebih ergonomis daripada next previous yang butuhin tombol banyak. kalo kaya gini kan terlihat semua datanya sekaligus. ga sah klak klik lagi..hehehe :D, tapi bisa kq kalo mo dibuat next previous.. πŸ˜€

      Balas

      • netfriend007
        Des 05, 2011 @ 20:41:56

        Masa Om,
        Kalau datanya jutaan, emang gak apa-apa ditampilin semuanya dan discroll? apa tidak lebih baik pake pagination next dan previous?

      • bahrie-___-
        Des 06, 2011 @ 10:34:38

        oh.. kalo soal data jutaan itu tarapnya sudah advance ato expert, kalo yang saya contohin ini kan buat para pemula..hehee cuman nyontohin koneksi database pake java.. πŸ˜€ kalo yang pake pagination ada cara nya lagi. di implementnya ditambah lagi. jadi nanti yang ditampilin data keberapa sampai berapa. πŸ˜€

  5. Ash Heart
    Mei 08, 2011 @ 00:28:25

    boss..tny dnk..

    ko wkt dbk prjectny msh error di main di

    import com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel;
    gmn y??
    maklum newbie

    Balas

    • bahrie-___-
      Mei 08, 2011 @ 07:07:57

      oh…
      mas nya pake OpenJDK ya?? library yg saya pake itu jdk yg dari SUN.. makanya ga bisa di import. mending importnya dihapus. terus nanti code yg dibawahnya yg ada merah2nya dihapus juga.. . ga masalah kq itu. itu cuman saya buat untuk tampilannya supaya lebih menarik. tanpa itu juga ada tampilannya, namun hanya tampilan standart java. πŸ˜€

      Balas

    • netfriend007
      Des 06, 2011 @ 11:07:23

      Iyah ditunggu tutorialnya yang ada next dan previous…
      thanks..

      Balas

      • bahrie-___-
        Des 06, 2011 @ 11:20:19

        wah jadi punya banyak PR artikel nih..hehee insyaAllah saya posting nanti..hehe

  6. Ash Heart
    Mei 08, 2011 @ 09:53:02

    trnyt ad lg yg msh bgng..
    error di formutama

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());

    gmn y boss??kn tu kodeny readonly..

    Balas

  7. Benny
    Mei 23, 2011 @ 21:36:57

    hoho, makasih banyak y Bro (^_^), q sangat terbantu nih. maklum q masih newbie, masih pemula belajar java πŸ˜›

    Balas

  8. Ruben
    Jul 01, 2011 @ 01:27:25

    Thanks for share gan..

    Balas

  9. Udin
    Nov 08, 2011 @ 05:18:41

    Mantap Bray..law bisa tambah lagi project mvc desktop nya(yg lebih power full)..lagi belajar mvc ne… πŸ˜›

    Balas

    • bahrie-___-
      Nov 08, 2011 @ 08:21:46

      itu udah mvc, walau ga full..hehehhee lah kan mvc buat aplikasi kalo udah ruwet banget. nah itu masih sederhana. jadi kalo make mvc nanti malah pada bingung.. inti dan yg terpenting dari artikel diatas adalah bisa mengonekkan database ke aplikasi dan bikin crud sederhana..hihihiihihi *ngeles*

      Balas

  10. nurul
    Nov 08, 2011 @ 07:31:39

    itu pake netbeans y bang gan? kalo pke eclipse gimana?
    masih bisa MVC ndak?

    Balas

    • bahrie-___-
      Nov 08, 2011 @ 08:22:40

      iya pake netbeans.. oh masih bisa sekali… πŸ˜€ di coba aja.. ti import ke projectnya eclipse kalo ga slah.. πŸ˜€

      Balas

  11. Lia
    Des 03, 2011 @ 23:57:58

    klo pke bluej bs g tuh??
    trus nanti klo mw ngecek/mangggil data yg ada atau yg sdh diinput, caranya lg gmn bos?
    heheh thx

    Balas

    • bahrie-___-
      Des 04, 2011 @ 13:15:03

      haduh.. bluej itu apaan? cara manggil data nya ya load aja data dari database masukin ke dalam kelas buat di mapping dan dipanggil dalam aplikasi yang sudah di buat. πŸ˜€

      Balas

  12. Arnando
    Des 05, 2011 @ 20:33:16

    gan…itu perlu d download jdbc-ny dulu y ??

    Balas

    • bahrie-___-
      Des 05, 2011 @ 20:36:17

      di netbeans kan udah ada jdbc nya. tinggal klik kanan pada libraries add library cari aja yang Mysql jdbc driver. πŸ˜€ beres.

      Balas

  13. sunupermana
    Des 20, 2011 @ 19:46:51

    bang bikin formnya pake jframe kan ya??
    script dibelakangnya pake yang diatas itu?

    Balas

  14. PTC TERBAIK 2011
    Des 29, 2011 @ 19:57:34

    Thank’z ats sharex ^_^… oia klo mau bkin menu agar bisa print data dari database bgaimna y?

    Balas

    • bahrie
      Des 30, 2011 @ 20:23:50

      print gimana maksudnya? print ke table ato ke printer ato ke lembar kaya pdf?

      Balas

      • PTC TERBAIK 2011
        Des 30, 2011 @ 21:59:08

        Print ke printer maz broe, jadi setelah data di input mao dibuat laporan datanya… di java bisa bikin menu print preview ga ya? mhon bibbinganya lgi bljar bkin aplikasi database pke java nie… n_n

      • bahrie
        Des 30, 2011 @ 23:05:26

        ooooo blajar dulu jasper report. searching di google.. buat report java menggunakan jasperreport
        editornya namanya ireport. cari di google pasti ketemu. nanti download aja..

      • PTC TERBAIK 2011
        Des 31, 2011 @ 11:42:20

        Iya maz broe, thank’z bgt ats infox… mo dri q lngsunk plajari… oia mo nnya lgi nie, low kuliah TI da jrusan yg ngbhas networking sma java programink ga y?

  15. rizki
    Jan 18, 2012 @ 12:01:07

    mas,
    maaf sangat nubie sekali di java., ada bbrp pertanyaan ni :
    1. gmana cara buka source code nya itu di eclipse?krn sya sdh coba dgn drag drop di src folder tapi ttp error.,
    2. kalo saya pake mysql workbench utk entry data di databasenya, bagaimana cara utk koneksi ke data tersebut?
    terimakasih

    Balas

    • bahrie
      Jan 18, 2012 @ 12:49:17

      wah belum tahu saya kalo project dari netbeans dibuka pake eclipse. kenpa ga di buka di netbeans aja? lagian netbeans juga ga bayar. gratis tis tis.hehehe untuk yg masih awal saran saya sih jangan dipersusah dulu blajarnya biar perkembangannya ditidak tiba2 berhenti. πŸ˜€ cuman saran aja. πŸ˜€
      koneksi di java sama aja.. mo entry pake apa aja.. koneksinya ya kaya gitu. pake workbench atopun phpmyadmin sama aja..hehehe lbh bagus lagi kalo entry datanya dari aplikasi yang dibikin pake java.hehehe

      Balas

  16. lutfie
    Mar 08, 2012 @ 18:29:07

    gan updatenya ane ga bisa nih…aplikasi jalan tapi diupdate ga ngefek
    klo ane cek coding kayanya sama aja gan punya ane ma punya agan…
    mohon pencerahan gan,makasih sebelumnya

    Balas

    • bahrie
      Mar 09, 2012 @ 09:50:38

      coba dicari errornya dimana, diperbaiki..kemungkinan koding yg saya kasih juga masih error.. πŸ˜€ maap.

      Balas

  17. denias9301
    Sep 07, 2012 @ 12:36:30

    thx atas codingnya, mas mau nanya gimana cara mencegah agar kita tdk nginput data dgn primary key yg udah ad ? sy bingung buat exceptionnya πŸ™‚

    Balas

  18. ofan
    Sep 25, 2012 @ 21:26:46

    Thank’s bos atas ilmu nya

    Balas

  19. Yudhie Tw
    Nov 23, 2012 @ 04:32:07

    ijin download gan

    Balas

  20. sandi
    Des 19, 2012 @ 00:17:49

    mas saya coba contoh programnya tetapi masih error di Listlist=new ArrayList(); pada implement, mohon pencerahannya,,

    Balas

    • bahrie
      Des 19, 2012 @ 09:10:27

      itu Listlist nya jangan di gabung. terus kalau gitu gak mau, di ganti gini

      List list=new ArrayList(); //Person diganti nama Class

      Balas

  21. Ashyar Hidayatullah
    Mei 17, 2013 @ 11:24:42

    mas istilah MVC apa ya..maaf masih newbee belum netes…

    Balas

  22. pan
    Okt 09, 2013 @ 21:21:04

    mas, Cara test koneksi dar aplikasi CRUD ini gmn yah ?
    saya sdah mengikuti ( mencontoh) petunjuk2 nya tapi kq pas pertama d jalanin data tidak muncul di tabel.

    mohon petunjuknya mas
    terimakasih

    Balas

  23. Muhammad Firman Akbar
    Okt 12, 2014 @ 12:26:01

    gan biar JTable bisa ikutin panjang FORM saat kita maximize gimana ?

    Balas

  24. rizky mfauzie
    Okt 27, 2016 @ 19:42:59

    ty gan.membantu
    tapi kalo buat masukin text dari radiobutton ke jtable gimana gan ?

    Balas

Tinggalkan Balasan ke bahrie Batalkan balasan