Sabtu, 27 April 2013

Membuat Data Entry Part 3

Pada bagian terakhir ini kita akan membuat view (user interface) dan controller.

Langkah ke-5: Buat View + binding dengan model

Mungkin ini bagian yang paling menyenangkan, sekarang kita buat GUI-nya.  Buat 2 JPanel seperti dibawah ini. Ingat ya JPanel bukan JFrame. Untuk buat JPanel bisa pakai Ctrl+N > Swing GUI Forms > JPanel. Misal kita beri nama PanelLogin dan PanelEntry. Drag n drop komponen-komponen Swing ke panel tersebut jadi seperti di bawah ini.
Kalo udah, kita buat JFrame dengan nama MainFrame. Untuk layoutnya gunakan CardLayout. Klik kanan frame tersebut > Set Layout > CardLayout
Kalo sudah drag PanelLogin ke MainFrame.
Next………
Masuk ke Navigator Window > pindahkan panelEntry1 dari Other Component ke JFrame, letakkan di bawah panelLogin1 seperti gambar berikut.
Ok, pembuatan GUI-nya sudah selesai. Tinggal binding dengan model yang telah kita buat. Untuk cara bindingnya, sekali lagi Anda bisa baca artikel “Beans Binding: Sinkronisasi Model dan View di Java Swing”.
Tapi tunggu dulu, ada beberapa komponen yang tidak bisa kita binding. Lihat PanelEntry, untuk isian Jenis Kelamin, di situ ada 2 jRadioButton. Dua jRadioButton itu harus berada dalam ButtonGroup yang sama. Tetapi, di ButtonGroup itu tidak ada atribut yang bisa dibinding dengan model kita. Jadi solusinya adalah kita buat komponen ButtonGroup baru yang mengekstend ButtonGroup misal namanya ButtonGroupJenisKelamin.
Di ButtonGroupJenisKelamin kita tambahkan atribut “selectedText” yang akan menyimpan atribut JenisKelamin.
Berikut ini class ButtonGroupJenisKelamin.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
/**
 *  For more information
 *  my email rn.hindarwan@programmer.net
 */
package com.wordpress.erenha.java.desktop.entry.view.model;
 
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import javax.swing.AbstractButton;
import javax.swing.ButtonGroup;
import javax.swing.JRadioButton;
 
/**
 * ButtonGroupJenisKelamin.java
 * Turunan class ButtonGroup.
 * Atribut selectedText ditambahkan agar dapat digunakan untuk
 * medukung binding dengan model
 * @author Hindarwan
 */
public class ButtonGroupJenisKelamin extends ButtonGroup {
 
    private transient final PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
    private String selectedText;
    public static final String PROP_SELECTEDTEXT = "selectedText";
 
    public String getSelectedText() {
        if (!buttons.isEmpty()) {
            for (AbstractButton abstractButton : buttons) {
                if (abstractButton instanceof JRadioButton) {
                    JRadioButton nextElement = (JRadioButton) abstractButton;
                    if (nextElement.isSelected()) {
                        selectedText = nextElement.getText();
                        return selectedText;
                    }
                }
            }
        }
        return selectedText;
    }
 
    public void setSelectedText(String selectedText) {
        String oldSelectedText = this.selectedText;
        this.selectedText = selectedText;
        if (!buttons.isEmpty()) {
            for (AbstractButton abstractButton : buttons) {
                if (abstractButton instanceof JRadioButton) {
                    JRadioButton nextElement = (JRadioButton) abstractButton;
                    if (selectedText.equals(nextElement.getText())) {
                        nextElement.setSelected(true);
                        break;
                    } else {
                        nextElement.setSelected(false);
                    }
                }
            }
        }
        propertyChangeSupport.firePropertyChange(PROP_SELECTEDTEXT, oldSelectedText, selectedText);
    }
 
    public void addPropertyChangeListener(PropertyChangeListener listener) {
        propertyChangeSupport.addPropertyChangeListener(listener);
    }
 
    public void removePropertyChangeListener(PropertyChangeListener listener) {
        propertyChangeSupport.removePropertyChangeListener(listener);
    }
}
Hasil akhir binding untuk model userLogin dan mahasiswa seperti berikut ini (lihat di bagian Binding Properties).
 

Langkah ke-6: Buat Controller + Test

Ketika ada action dari pemakai aplikasi misalnya dia menekan button login, insert, update, delete maka akan ditangani oleh class controller ini. Jadi tidak ditangani langsung oleh view. Jadi di view tidak akan banyak code. Kita juga bisa melakukan validasi lewat controller ini. Bayangkan jika validasi dilakukan di view, dimana-mana banyak  if-else if-else yang membingungkan. Cape deh…
Berikut Contoller untuk PanelLogin
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
/**
 *  For more information
 *  my email rn.hindarwan@programmer.net
 */
package com.wordpress.erenha.java.desktop.entry.controller;
 
import com.wordpress.erenha.java.desktop.entry.dao.UserLoginDao;
import com.wordpress.erenha.java.desktop.entry.dao.impl.UserLoginDaoImpl;
import com.wordpress.erenha.java.desktop.entry.model.UserLogin;
import com.wordpress.erenha.java.desktop.entry.utility.CardLayoutUtility;
import com.wordpress.erenha.java.desktop.entry.utility.Message;
import java.util.logging.Level;
import java.util.logging.Logger;
 
/**
 * LoginController.java
 * @author Hindarwan
 */
public class LoginController {
 
    private UserLogin userLogin;
 
    public void setUserLogin(UserLogin userLogin) {
        this.userLogin = userLogin;
    }
 
    /**
     * Method ini akan dipanggil ketika button login diklik.
     */
    public void login() {
        String username = userLogin.getUsername();
        String password = userLogin.getPassword();
        if (username.isEmpty()) {
            Message.errorMessage("Username masih kosong");
        } else if (password.isEmpty()) {
            Message.errorMessage("Password masih kosong");
        } else {
            UserLoginDao loginDao = new UserLoginDaoImpl();
            boolean isValid;
            try {
                isValid = loginDao.getUserLogin(username, password);
                if (isValid) {
                    //masuk ke panel entry jika data username dan password sesuai
                    CardLayoutUtility.next();
                } else {
                    //jika username dan password tidak sesuai muncul pesan ini
                    Message.errorMessage("Username dan password tidak cocok");
                }
            } catch (Exception ex) {
                Logger.getLogger(LoginController.class.getName()).log(Level.SEVERE, null, ex);
            }
 
        }
    }
}
Kalo ini controller untuk PanelEntry
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/**
 *  For more information
 *  my email rn.hindarwan@programmer.net
 */
package com.wordpress.erenha.java.desktop.entry.controller;
 
import com.wordpress.erenha.java.desktop.entry.dao.MahasiswaDao;
import com.wordpress.erenha.java.desktop.entry.dao.impl.MahasiswaDaoImpl;
import com.wordpress.erenha.java.desktop.entry.model.Mahasiswa;
import com.wordpress.erenha.java.desktop.entry.utility.Message;
import java.util.logging.Level;
import java.util.logging.Logger;
 
/**
 *
 * @author Hindarwan
 */
public class EntryController {
 
    private Mahasiswa mahasiswa;
 
    public void setMahasiswa(Mahasiswa mahasiswa) {
        this.mahasiswa = mahasiswa;
    }
 
    /**
     * Method yang dipanggil ketika button insert diklik.
     */
    public void insert() {
        if (validasi()) {
            MahasiswaDao dao = new MahasiswaDaoImpl();
            try {
                dao.insert(mahasiswa);
                Message.infoMessage("Data berhasil diinsert");
                clear();
            } catch (Exception ex) {
                Logger.getLogger(EntryController.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
 
    /**
     * Method yang dipanggil ketika button update diklik.
     */
    public void update() {
        if (validasi()) {
            MahasiswaDao dao = new MahasiswaDaoImpl();
            try {
                dao.update(mahasiswa);
                Message.infoMessage("Data berhasil diupdate");
                clear();
            } catch (Exception ex) {
                Logger.getLogger(EntryController.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
 
    /**
     * Method yang dipanggil ketika button delete diklik.
     */
    public void delete() {
        MahasiswaDao dao = new MahasiswaDaoImpl();
        try {
            dao.delete(mahasiswa.getNim());
            Message.infoMessage("Data berhasil dihapus");
            clear();
        } catch (Exception ex) {
            Logger.getLogger(EntryController.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
 
    /**
     * Method yang dipanggil ketika button load diklik.
     */
    public void getByNim() {
        MahasiswaDao dao = new MahasiswaDaoImpl();
        System.out.println(mahasiswa.getNim());
        try {
            Mahasiswa m = dao.getByNim(mahasiswa.getNim());
            if (m != null) {
                mahasiswa.setNim(m.getNim());
                mahasiswa.setNama(m.getNama());
                mahasiswa.setJenisKelamin(m.getJenisKelamin());
                mahasiswa.setAlamat(m.getAlamat());
                mahasiswa.setKelas(m.getKelas());
                mahasiswa.setStatus(m.getStatus());
            } else {
                Message.errorMessage("Data tidak ditemukan");
            }
        } catch (Exception ex) {
            Logger.getLogger(EntryController.class.getName()).log(Level.SEVERE, null, ex);
        }
 
    }
 
    /**
     * ketika button new diklik, akan kembali ke default.
     * method ini juga dipanggil ketika insert/update/delete berhasil.
     */
    public void clear() {
        mahasiswa.setNim("");
        mahasiswa.setNama("");
        mahasiswa.setJenisKelamin("Laki-laki");
        mahasiswa.setAlamat("");
        mahasiswa.setKelas("");
        mahasiswa.setStatus("Ikatan Dinas");
    }
 
    /**
     * Untuk validasi field.
     * @return false jika data tidak valid
     */
    public boolean validasi() {
        boolean isValid = false;
        if (mahasiswa.getNim().isEmpty() || mahasiswa.getNim() == null) {
            Message.errorMessage("NIM harus diisi");
        } else if (mahasiswa.getNama().isEmpty() || mahasiswa.getNama() == null) {
            Message.errorMessage("Nama harus diisi");
        } else if (mahasiswa.getJenisKelamin().isEmpty() || mahasiswa.getJenisKelamin() == null) {
            Message.errorMessage("Jenis Kelamin harus diisi");
        } else if (mahasiswa.getAlamat().isEmpty() || mahasiswa.getAlamat() == null) {
            Message.errorMessage("Alamat harus diisi");
        } else if (mahasiswa.getKelas().isEmpty() || mahasiswa.getKelas() == null) {
            Message.errorMessage("Kelas harus diisi");
        } else {
            isValid = true;
        }
        return isValid;
    }
}
Controller-controller tadi dipanggil di view. Misal ketika buttonLogin yang ada di PanelLogin diklik, codenya seperti ini.
1
2
3
4
5
...
    private void buttonLoginActionPerformed(java.awt.event.ActionEvent evt) {
        controller.login();
    }
...
Kalo di PanelEntry codenya jadi seperti ini…
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
...
 
    private void buttonInsertActionPerformed(java.awt.event.ActionEvent evt) {
        controller.insert();
    }
 
    private void radioButtonPerempuanActionPerformed(java.awt.event.ActionEvent evt) {
        buttonGroupJK.setSelectedText(evt.getActionCommand());
    }
 
    private void radioButtonLakiActionPerformed(java.awt.event.ActionEvent evt) {
        buttonGroupJK.setSelectedText(evt.getActionCommand());
    }
 
    private void buttonNewActionPerformed(java.awt.event.ActionEvent evt) {
        controller.clear();
    }
 
    private void buttonLoadActionPerformed(java.awt.event.ActionEvent evt) {
        controller.getByNim();
    }
 
    private void buttonUpdateActionPerformed(java.awt.event.ActionEvent evt) {
        controller.update();
    }
 
    private void buttonDeleteActionPerformed(java.awt.event.ActionEvent evt) {
        controller.delete();
    }
...
Terlihat code di view akan lebih rapi.
Selesai sudah pembuatan program data entry mahasiswa ini. Sekarang coba kita jalankan…
Masuk menggunakan username: admin, password : admin
Jika berhasil maka anda akan masuk ke form entry.
Sekarang coba untuk insert suatu data. Misalkan kita isi seperti ini.
Maka dapat dilihat kalau validasi yang kita buat telah berhasil.
Jika datanya telah lengkap, maka hasilnya seperti ini.
Sekarang coba cek di database, apakah datanya benar-benar telah masuk.
Di netbeans, masuk ke Service Window. Klik kanan table mahasiswa > View Data untuk melihat data mahasiswa.
Jika datanya muncul seperti di bawah ini, berarti proses insert tadi telah berhasil.
Silahkan dicoba untuk fungsi yang lainnya.
Jika ada pertanyaan, silahkan kontak saya. Kurang lebihnya saya mohon maaf. Terima kasih.
Semoga bermanfaat. Enjoy Java!

Rabu, 24 April 2013

Membuat Data Entry Part 2

Artikel ini merupakan kelanjutan dari artikel sebelumnya yaitu Membuat Program Data Entry di Netbeans (Part 1 of 3).
Pada bagian ini kita akan buat model dan DAO. Model berfungsi untuk menyimpan state objek pada saat aplikasi dijalankan. Sedangkan DAO digunakan untuk akses ke database. Dalam program ini untuk akses ke database akan digunakan Java Database Connectivity (JDBC). JDBC ini dapat dikatakan sebagai jembatan yang akan menghubungkan program kita dengan DBMS. Pada program ini DBMS yang digunakan yaitu MySQL.
Ok, langsung saja kita masuk ke langkah berikutnya.

Langkah ke-3: Buat Model

Karena di database ada 2 tabel maka kita buat 2 class model juga, UserLogin dan Mahasiswa. Karena di program ini mau pakai data binding, maka class yang dibuat harus mengikuti aturan JavaBeans. Cara  membuat model yang bisa kita gunakan untuk data binding, bisa dilihat di artikel “Beans Binding: Sinkronisasi Model dan View di Java Swing
Berikut ini model untuk class UserLogin
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/**
 *  For more information
 *  my email rn.hindarwan@programmer.net
 */
package com.wordpress.erenha.java.desktop.entry.model;
 
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.io.Serializable;
 
/**
 * UserLogin.java
 * Semua atribut dan method getter/setter class ini digenerate dari netbeans lho.
 * Kalau mau tahu caranya bisa lihat http://wp.me/pSRPo-3i
 * @author Hindarwan
 */
public class UserLogin implements Serializable {
 
    private transient final PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
    private String username;
    public static final String PROP_USERNAME = "username";
    private String password;
    public static final String PROP_PASSWORD = "password";
 
    public String getPassword() {
        return password;
    }
 
    public void setPassword(String password) {
        String oldPassword = this.password;
        this.password = password;
        propertyChangeSupport.firePropertyChange(PROP_PASSWORD, oldPassword, password);
    }
 
    public String getUsername() {
        return username;
    }
 
    public void setUsername(String username) {
        String oldUsername = this.username;
        this.username = username;
        propertyChangeSupport.firePropertyChange(PROP_USERNAME, oldUsername, username);
    }
 
    public void addPropertyChangeListener(PropertyChangeListener listener) {
        propertyChangeSupport.addPropertyChangeListener(listener);
    }
 
    public void removePropertyChangeListener(PropertyChangeListener listener) {
        propertyChangeSupport.removePropertyChangeListener(listener);
    }
}
Yang ini untuk model class Mahasiswa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
/**
 *  For more information
 *  my email rn.hindarwan@programmer.net
 */
package com.wordpress.erenha.java.desktop.entry.model;
 
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.io.Serializable;
 
/**
 * Mahasiswa.java
 * Semua atribut dan method getter/setter class ini digenerate dari netbeans lho.
 * Kalau mau tahu caranya bisa lihat http://wp.me/pSRPo-3i
 * @author Hindarwan
 */
public class Mahasiswa implements Serializable {
 
    private transient final PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
    private String nim;
    public static final String PROP_NIM = "nim";
    private String nama;
    public static final String PROP_NAMA = "nama";
    private String jenisKelamin;
    public static final String PROP_JENISKELAMIN = "jenisKelamin";
    private String alamat;
    public static final String PROP_ALAMAT = "alamat";
    private String kelas;
    public static final String PROP_KELAS = "kelas";
    private String status;
    public static final String PROP_STATUS = "status";
 
    public String getKelas() {
        return kelas;
    }
 
    public void setKelas(String kelas) {
        String oldKelas = this.kelas;
        this.kelas = kelas;
        propertyChangeSupport.firePropertyChange(PROP_KELAS, oldKelas, kelas);
    }
 
    public String getAlamat() {
        return alamat;
    }
 
    public void setAlamat(String alamat) {
        String oldAlamat = this.alamat;
        this.alamat = alamat;
        propertyChangeSupport.firePropertyChange(PROP_ALAMAT, oldAlamat, alamat);
    }
 
    public String getJenisKelamin() {
        return jenisKelamin;
    }
 
    public void setJenisKelamin(String jenisKelamin) {
        String oldJenisKelamin = this.jenisKelamin;
        this.jenisKelamin = jenisKelamin;
        propertyChangeSupport.firePropertyChange(PROP_JENISKELAMIN, oldJenisKelamin, jenisKelamin);
    }
 
    public String getNama() {
        return nama;
    }
 
    public void setNama(String nama) {
        String oldNama = this.nama;
        this.nama = nama;
        propertyChangeSupport.firePropertyChange(PROP_NAMA, oldNama, nama);
    }
 
    public String getNim() {
        return nim;
    }
 
    public void setNim(String nim) {
        String oldNim = this.nim;
        this.nim = nim;
        propertyChangeSupport.firePropertyChange(PROP_NIM, oldNim, nim);
    }
 
    public String getStatus() {
        return status;
    }
 
    public void setStatus(String status) {
        String oldStatus = this.status;
        this.status = status;
        propertyChangeSupport.firePropertyChange(PROP_STATUS, oldStatus, status);
    }
 
    public void addPropertyChangeListener(PropertyChangeListener listener) {
        propertyChangeSupport.addPropertyChangeListener(listener);
    }
 
    public void removePropertyChangeListener(PropertyChangeListener listener) {
        propertyChangeSupport.removePropertyChangeListener(listener);
    }
}
Ingat bahwa method getter setter dari class UserLogin dan Mahasiswa itu bisa digenerate lewat netbeans. Silahkan baca artikel “Beans Binding: Sinkronisasi Model dan View di Java Swing” untuk mengetahui caranya.

Langkah ke-4: Buat DAO + Implementasinya

Setelah buat model, sekarang saatnya buat Data Access Object (DAO). DAO berupa interface yang terdiri dari method-method seperti insert, update, delete, getBy, getAll, dll tergantung kebutuhan.
Berikut interface UserLoginDao
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**
 *  For more information
 *  my email rn.hindarwan@programmer.net
 */
package com.wordpress.erenha.java.desktop.entry.dao;
 
/**
 * UserLoginDao.java Interface ini hanya punya satu method yaitu getUserLogin
 * yang digunakan untuk mengambil data username dan password dari database.
 *
 * @author Hindarwan
 */
public interface UserLoginDao {
 
    public boolean getUserLogin(String username, String password) throws Exception;
}
Dan ini merupakan implementasinya.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/**
 *  For more information
 *  my email rn.hindarwan@programmer.net
 */
package com.wordpress.erenha.java.desktop.entry.dao.impl;
 
import com.wordpress.erenha.java.desktop.entry.dao.UserLoginDao;
import com.wordpress.erenha.java.desktop.entry.utility.DatabaseUtility;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
 
/**
 * UserLoginDaoImpl.java
 * Implementasi dari interface UserLoginDao
 * @author Hindarwan
 */
public class UserLoginDaoImpl implements UserLoginDao {
 
    private Connection connection;
    private final String getUserLoginQuery =
            "SELECT * FROM user_login WHERE username = ? AND password = MD5(?)";
 
    @Override
    public boolean getUserLogin(String username, String password) throws Exception {
        PreparedStatement statement = null;
        try {
            connection = DatabaseUtility.getConnection();
            connection.setAutoCommit(false);
 
            statement = connection.prepareStatement(getUserLoginQuery);
            statement.setString(1, username);
            statement.setString(2, password);
            ResultSet resultSet = statement.executeQuery();
            connection.commit();
            if (resultSet.next()) {
                return true;
            } else {
                return false;
            }
        } catch (SQLException ex) {
            connection.rollback();
            throw ex;
        } finally {
            connection.setAutoCommit(true);
            if (statement != null) {
                statement.close();
            }
        }
    }
}
Interface MahasiswaDao
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/**
 *  For more information
 *  my email rn.hindarwan@programmer.net
 */
package com.wordpress.erenha.java.desktop.entry.dao;
 
import com.wordpress.erenha.java.desktop.entry.model.Mahasiswa;
 
/**
 * MahasiswaDao.java
 * Setidaknya ada 4 method yang dibutuhkan untuk akses tabel mahasiswa yaitu
 * insert, update, delete, dan getByNim
 * @author Hindarwan
 */
public interface MahasiswaDao {
 
    public void insert(Mahasiswa mahasiswa) throws Exception;
 
    public void update(Mahasiswa mahasiswa) throws Exception;
 
    public void delete(String nim) throws Exception;
 
    public Mahasiswa getByNim(String nim) throws Exception;
}
Implementasi MahasiswaDao
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
/**
 *  For more information
 *  my email rn.hindarwan@programmer.net
 */
package com.wordpress.erenha.java.desktop.entry.dao.impl;
 
import com.wordpress.erenha.java.desktop.entry.dao.MahasiswaDao;
import com.wordpress.erenha.java.desktop.entry.model.Mahasiswa;
import com.wordpress.erenha.java.desktop.entry.utility.DatabaseUtility;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
 
/**
 * MahasiswaDaoImpl.java
 * Implementasi dari interface MahasiswaDao
 * @author Hindarwan
 */
public class MahasiswaDaoImpl implements MahasiswaDao {
 
    private Connection connection;
    private final String insertQuery =
            "INSERT INTO mahasiswa VALUES (?,?,?,?,?,?)";
    private final String updateQuery =
            "UPDATE mahasiswa SET nama = ?, jenis_kelamin = ?, "
            + "alamat = ?, kelas = ?, status = ? WHERE nim = ?";
    private final String deleteQuery =
            "DELETE from mahasiswa WHERE nim = ?";
    private final String getByNimQuery =
            "SELECT * FROM mahasiswa WHERE nim = ?";
 
    @Override
    public void insert(Mahasiswa mahasiswa) throws Exception {
        PreparedStatement statement = null;
        try {
            connection = DatabaseUtility.getConnection();
            connection.setAutoCommit(false);
 
            statement = connection.prepareStatement(insertQuery);
            statement.setString(1, mahasiswa.getNim());
            statement.setString(2, mahasiswa.getNama());
            statement.setString(3, mahasiswa.getJenisKelamin());
            statement.setString(4, mahasiswa.getAlamat());
            statement.setString(5, mahasiswa.getKelas());
            statement.setString(6, mahasiswa.getStatus());
            statement.execute();
 
            connection.commit();
 
        } catch (SQLException ex) {
            connection.rollback();
            throw ex;
        } finally {
            connection.setAutoCommit(true);
            if (statement != null) {
                statement.close();
            }
        }
    }
 
    @Override
    public void update(Mahasiswa mahasiswa) throws Exception {
        PreparedStatement statement = null;
        try {
            connection = DatabaseUtility.getConnection();
            connection.setAutoCommit(false);
 
            statement = connection.prepareStatement(updateQuery);
            statement.setString(1, mahasiswa.getNama());
            statement.setString(2, mahasiswa.getJenisKelamin());
            statement.setString(3, mahasiswa.getAlamat());
            statement.setString(4, mahasiswa.getKelas());
            statement.setString(5, mahasiswa.getStatus());
            statement.setString(6, mahasiswa.getNim());
            statement.execute();
 
            connection.commit();
 
        } catch (SQLException ex) {
            connection.rollback();
            throw ex;
        } finally {
            connection.setAutoCommit(true);
            if (statement != null) {
                statement.close();
            }
        }
    }
 
    @Override
    public void delete(String nim) throws Exception {
        PreparedStatement statement = null;
        try {
            connection = DatabaseUtility.getConnection();
            connection.setAutoCommit(false);
 
            statement = connection.prepareStatement(deleteQuery);
            statement.setString(1, nim);
            statement.execute();
 
            connection.commit();
 
        } catch (SQLException ex) {
            connection.rollback();
            throw ex;
        } finally {
            connection.setAutoCommit(true);
            if (statement != null) {
                statement.close();
            }
        }
    }
 
    @Override
    public Mahasiswa getByNim(String nim) throws Exception {
        PreparedStatement statement = null;
        try {
            connection = DatabaseUtility.getConnection();
            connection.setAutoCommit(false);
 
            statement = connection.prepareStatement(getByNimQuery);
            statement.setString(1, nim);
            ResultSet resultSet = statement.executeQuery();
            Mahasiswa mahasiswa = null;
            if (resultSet.next()) {
                mahasiswa = new Mahasiswa();
                mahasiswa.setNim(resultSet.getString("nim"));
                mahasiswa.setNama(resultSet.getString("nama"));
                mahasiswa.setJenisKelamin(resultSet.getString("jenis_kelamin"));
                mahasiswa.setAlamat(resultSet.getString("alamat"));
                mahasiswa.setKelas(resultSet.getString("kelas"));
                mahasiswa.setStatus(resultSet.getString("status"));
            }
            connection.commit();
            return mahasiswa;
        } catch (SQLException ex) {
            connection.rollback();
            throw ex;
        } finally {
            connection.setAutoCommit(true);
            if (statement != null) {
                statement.close();
            }
        }
    }
}
Ok setelah kita buat model dan DAO + implementasinya pada artikel selanjutnya kita akan buat View (User Interface) dan Controller.