-->

Membuat CRUD pertama di Aplikasi Java

CRUD ( Create Read Update Delete ) merupakan fungsi yang wajib ada dalam suatu aplikasi database. Bagi yang pertama kali belajar java, ane mau kasih sedikit ilmu mengenai cara membuat CRUD ini.

Konsep yang ane pake pada pembuatan aplikasi ini adalah dengan menggunakan konsep MVC. Apa itu MVC==> Model View Controller. Program dibagi menjadi beberapa modul antara lain adalah Model, View dan Controller. Model ini adalah representasi data yang akan kita mapping pada aplikasi nantinya. Nah untuk View adalah user interface yang akan dibuat untuk tampilan user. Sedangkan untuk controller adalah fungsi yang berguna untuk membangun aplikasi kita dimana fungsi yang ada disini merupakan proses kontrol terhadap alur kerja dari program kita. Low masih kurang jelas silahkan googling dengan keyword MVC..

Langsung aja tanpa basa - basi ane langsung kasih beberapa contoh coding yang ane buat. 

Nah ane ingin membuat fungsi CRUD dasar pada aplikasi java kita..
Oke langsung kita buat listener pertama dulu ya kita buat interfacenya...

import java.util.List;

/**
 *
 * @author Mr.Hands
 */
public interface Listener<E>  {
    public int update(E object );
    public int insert(E object);
    public int delete(E object);
    public List<E> getData();
}




Nah interface ini memakai generic E yang gak tahu generic silahkan lihat dulu di sini. Nah kenapa ane buat generic biar semua code yang akan kita gunakan nanti dapat memakai object yang berbeda - beda. Sekarang kita buat class koneksi databasenya yah.. Sudah saya buatin untuk yang Excel, Access dan postgree tinggal gunakan saja..

import java.sql.Statement;
import java.sql.Connection;
import java.sql.DriverManager;

import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

/**
 * Class koneksi yang digunakan untuk koneksi ke database
 * ada 3 tipe koneksi:
 * <PRE>
 *          1. MySql
 *          2. MsAccess (*.mdb)
 *          3. PostgreSql
 * </PRE>
 *
 * Cara menggunakan kelas ini yaitu :
 * <code>
 * 1. MySQL
 * <code>
 *  <PRE>
 *       Koneksi.setTypeConnection(DriverTypeConnection.MYSQL); 
 *       Koneksi.setHost("localhost"); 
 *       Koneksi.setPassword(""); 
 *       Koneksi.setUser(""); 
 *       Koneksi.getConnection(); 
 *  </PRE>
 * <code>
 * 2. MsAccess
 * </code>
 * <PRE>
 *      Koneksi.setTypeConnection(DriverTypeConnection.MS_ACCESS);
 *      Koneksi.setDatabaseName("databasename");
 *      Koneksi.setFolderAccess("database");
 *      Koneksi.getConnection();
 * </PRE>
 * 3. PostgreSql
 * <code>
 *  <PRE>
 *       Koneksi.setTypeConnection(DriverTypeConnection.POSTGRE);
 *       Koneksi.setHost("localhost");
 *       Koneksi.setPassword("");
 *       Koneksi.setUser("");
 *       Koneksi.getConnection();
 *  </PRE>
 * <code>
 *
 *
 *
 * @author Mr.Hands
 */
public class Koneksi {

    public static Connection connection;
    public static PreparedStatement preparedStatement;
    public static Statement statement;
    public static String driverMysql = "com.mysql.jdbc.Driver";
    public static String driverAccess = "sun.jdbc.odbc.JdbcOdbcDriver";
    public static String driverPostgre = "org.postgresql.Driver";
    public static String urlMysql = "jdbc:mysql://";
    public static String urlAccess = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};";
    public static String urlPostgre = "";
    public static String user = "root";
    public static DriverTypeConnection typeConnection;
    public static String password = "";
    public static String databaseName;
    public static String folderAccess;
    public static String host = "localhost";

    public static Connection getConnection() {
        String url;
        String driver;
        switch (typeConnection) {
            case MS_ACCESS:
                driver = driverAccess;
                //jdbc:odbc:Driver={MicroSoft Access Driver (*.mdb)};DBQ="+System.getProperty("user.dir");+"/Database Itc Mangga2.mdb");
                url = urlAccess + "DBQ=" + System.getProperty("user.dir") + "/" + folderAccess + "/" + databaseName;
                break;
            case MYSQL:
                driver = driverMysql;
                //jdbc:mysql://localhost:3306/keuangan?user=root&password=";
                url = urlMysql + host + "/" + databaseName + "?user=" + user + "&password=" + password;
                break;
            case POSTGREE:
                url = urlPostgre;
                driver = driverPostgre;
                break;
            default:
                url = "NONE";
                driver = "NONE";
                break;
        }
        
        try {
            Class.forName(driver);
            connection = DriverManager.getConnection(url);
            //      JOptionPane.showMessageDialog(null, "Berhasil");

        } catch (SQLException ex) {
            Logger.getLogger(Koneksi.class.getName()).log(Level.SEVERE, null, ex);
            JOptionPane.showMessageDialog(null, "Koneksi Gagal");
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(Koneksi.class.getName()).log(Level.SEVERE, null, ex);
            JOptionPane.showMessageDialog(null, "Driver database tidak ditemukan");
        }
        return connection;
    }

    public static String getDatabaseName() {
        return databaseName;
    }

    public static void setDatabaseName(String databaseName) {
        Koneksi.databaseName = databaseName;
    }

    public static String getDriverPostgre() {
        return driverPostgre;
    }

    public static void setDriverPostgre(String driverPostgre) {
        Koneksi.driverPostgre = driverPostgre;
    }

    public static String getFolderAccess() {
        return folderAccess;
    }

    public static void setFolderAccess(String folderAccess) {
        Koneksi.folderAccess = folderAccess;
    }

    public static String getHost() {
        return host;
    }

    public static void setHost(String host) {
        Koneksi.host = host;
    }

    public static String getPassword() {
        return password;
    }

    public static void setPassword(String password) {
        Koneksi.password = password;
    }

    public static String getUrlAccess() {
        return urlAccess;
    }

    public static void setUrlAccess(String urlAccess) {
        Koneksi.urlAccess = urlAccess;
    }

    public static String getUrlMysql() {
        return urlMysql;
    }

    public static void setUrlMysql(String urlMysql) {
        Koneksi.urlMysql = urlMysql;
    }

    public static String getUser() {
        return user;
    }

    public static void setUser(String user) {
        Koneksi.user = user;
    }

    public static void setConnection(Connection connection) {
        Koneksi.connection = connection;
    }

    public static PreparedStatement getPreparedStatement() {
        return preparedStatement;
    }

    public static void setPreparedStatement(PreparedStatement preparedStatement) {
        Koneksi.preparedStatement = preparedStatement;
    }

    public static Statement getStatement() {
        return statement;
    }

    public static void setStatement(Statement statement) {
        Koneksi.statement = statement;
    }

    public static DriverTypeConnection getTypeConnection() {
        return typeConnection;
    }

    public static void setTypeConnection(DriverTypeConnection typeConnection) {
        Koneksi.typeConnection = typeConnection;
    }
}

terus jangan lupa nih ada Enum yang harus diperhatikan dari kode tersebut.

/**
 *
 * @author Mr.Hands
 */
public enum DriverTypeConnection {
    MYSQL,MS_ACCESS,POSTGREE
}

Nah setelah itu kita buat DefaultClassImpl yang akan kita gunakan sebagai basis model database untuk CRUD kita.. Langsung aja lihat kode di bawah ini...

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.Statement;
import javax.swing.JOptionPane;
import librarysmp2mojosongo.Connection.Koneksi;

/**
 *
 * @author Mr.Hands
 */
public abstract class DefaultClassImpl<E> implements Listener<E>{
    public Connection connection;
    public PreparedStatement preparedStatement;
    public Statement statement;
    public String update,insert,delete,getData;
    public DefaultClassImpl(){
        try{
          this.connection=Koneksi.getConnection();
        }catch(Exception e){
            JOptionPane.showMessageDialog(null, "Koneksi database belum didefinisikan");
            e.printStackTrace();
        }
    }
    public void loadSql(){
          //deklarisi dari update
        update = "UPDATE " + tableName + " SET ";
        int i = 1;
        while (i < column.length) {
            update = update + column[i]+"=?";
            if (!(i == column.length - 1)) {
                update = update + ",";
            }
            i++;
        }
        update = update + " WHERE " + column[0] + " =?";
        //akhir deklarasi update

        //deklarasi dari insert
        insert = "INSERT INTO " + tableName + " VALUES (";
        for (i = 0; i < column.length; i++) {
            insert = insert + "?";
            if (!(i == column.length - 1)) {
                insert = insert + ",";
            }
        }
        insert = insert + ")";
        //akhir dari insert;

        //awal dari delete
        delete = "DELETE FROM " + tableName + " WHERE " + column[0] + "=?";
        //akhir dari delete;

        getData="SELECT * FROM "+tableName;
    }

    /**
        public String id_kategori;
        public String nama;
     */
     public String tableName="";
     public String column []={""};

    public String[] getColumn() {
        return column;
    }

    public void setColumn(String[] column) {
        this.column = column;
    }

    public String getTableName() {
        return tableName;
    }

    public void setTableName(String tableName) {
        this.tableName = tableName;
    }


Nah pada kode tersebut sudah ane kasih beberapa fungsi standar untuk RUD.. karena C nya udah ada di databasenya sendiri hehe.. nah untuk bisa gunakan defaultclass ini sekarang kita gunakan modelnya untuk implementasinya..

**
 *
 * @author Mr.Hands
 */
 public class M_transaksi{
        int idTransaksi;
        String nama;

        public M_transaksi() {
        }

        public M_transaksi(int idTransaksi, String nama) {
            this.idTransaksi = idTransaksi;
            this.nama = nama;
        }

        public int getIdTransaksi() {
            return idTransaksi;
        }

        public void setIdTransaksi(int idTransaksi) {
            this.idTransaksi = idTransaksi;
        }

        public String getNama() {
            return nama;
        }

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

    }

Nah contoh model yang kita buat hanya ada 2 field dalam tabel M_transaksi kita yaitu idtransaksi dan namatransaksi.. Setelah model ini selesai kita buat selanjutnya adalah membuat implementasi model dari databasenya langsung saja lihat kodenya..

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import librarysmp2mojosongo.model.M_transaksi;

/**
 *
 * @author Mr.Hands
 */
public final class M_transaksiImpl extends DefaultClassImpl<M_transaksi>{
    public M_transaksiImpl() {
        super();
        setTableName("M_transaksi");
        String []kolom={"id_transaksi","nama"};
        setColumn(kolom);
        loadSql();
    }

    public int update(M_transaksi object) {
        try {
            preparedStatement = connection.prepareStatement(update);
            preparedStatement.setString(1, object.getNama());
            preparedStatement.setInt(2, object.getIdTransaksi());
            preparedStatement.execute();
            return 1;
        } catch (SQLException ex) {
            Logger.getLogger(M_transaksiImpl.class.getName()).log(Level.SEVERE, null, ex);
        }
        return 0;
    }

    public int insert(M_transaksi object) {
        try {
            preparedStatement = connection.prepareStatement(insert);
            preparedStatement.setInt(1, object.getIdTransaksi());
            preparedStatement.setString(2, object.getNama());
            preparedStatement.execute();
            return 1;
        } catch (SQLException ex) {
            Logger.getLogger(M_transaksiImpl.class.getName()).log(Level.SEVERE, null, ex);
        }
        return 0;
    }

    public int delete(M_transaksi object) {
        try {
            preparedStatement = connection.prepareStatement(delete);
            preparedStatement.setInt(1, object.getIdTransaksi());
            preparedStatement.execute();
            return 1;
        } catch (SQLException ex) {
            Logger.getLogger(M_transaksiImpl.class.getName()).log(Level.SEVERE, null, ex);
        }
        return 0;
    }

    public List<M_transaksi> getData() {
        List<M_transaksi> l=new ArrayList<M_transaksi>();
        try {
            statement = connection.createStatement();
            ResultSet resultSet=statement.executeQuery(getData);
            while(resultSet.next()){
                M_transaksi m=new M_transaksi();
                m.setIdTransaksi(resultSet.getInt(1));
                m.setNama(resultSet.getString(2));
                l.add(m);
            }
        } catch (SQLException ex) {
            Logger.getLogger(M_transaksiImpl.class.getName()).log(Level.SEVERE, null, ex);
        }
        return l;

    }
Yups hampir selesai program yang kita buat tinggal kita implementsikan saja di Viewnya..



Nah untuk viewnya tinggal kasih aja misal ada dua textfield dengan nama id dan nama transasksi setelah itu kasih kode seperti ini pada buttonAdd

private void buttonAddActionPerformed(java.awt.event.ActionEvent evt) {
        M_transaksi m=new M_transaksi();
        m.setIdTransaksi(Integer.parseInt(TextIdTransaksi.getText()));
        m.setNama(TextNamaTransaksi.getText());
        M_transaksiImpl impl=new M_transaksiImpl();
        impl.insert(m);
    }
Untuk button update tinggal ganti impl.update(m) . ya jangan lupa untuk menyeting databasenya pda saat pertama kali di run programnya pada JFrame yah..

public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                
                Koneksi.setTypeConnection(DriverTypeConnection.POSTGRE);
                Koneksi.setHost("localhost");
                Koneksi.setPassword("");
                Koneksi.setUser("");
                Koneksi.getConnection();
                new NewJFrame1().setVisible(true);

            }
        });
    }
Nah setelah jadi tinggal di run deh programnya. Semoga bermanfaat bagi yang lagi membuat aplikasi...
Facebook Comments

4 komentar

salam.....
saya masi pemula dalam java....
mau nanya neh....
1.pembuatannya pake netbeans atau editor biasa.
(saya blajarnya pake netbeans)
2.untuk paketnya(package) gmn? pisah or digabungin( koneksi,interface, dll)

Balas

sebenarnya sih mau pake editor/ide apa aja gak masalah.. tapi kalo mau yang pake basis gui builder pake netbeans lebih gampang..
Lebih baik dipisah pisah packagenya biar gampang dalam mengelolanya kalo mau pelajari dulu konsep MVC biar gampang..jadi nanti ada package untuk Model,View, dan Controller sendiri. Jadi yang sejenis bisa dijadikan dalam satu package..

Balas

makasihhhh gannnnnn ..... sangat memebantu

Balas

mantap bos tutorial nya...sangat jelas langsung ke point

Balas