Contoh Penggunaan Data Access Object (DAO)Pada JAVA

DAO merupakan sebuah design pattern yang digunakan oleh para programmer JAVA dalam membangun aplikasinya. Dengan menggunakan DAO kode program akan lebih terstruktur karena adanya pengelompokkan kode program sesuai dengan fungsinya…Pada contoh program yang ane buat… ini hanya menggunakan perintah – perintah dasar dalam MySQL seperti select, insert, update, dan delete. Untuk lebih mahirnya antum bisa kulik lebih dalam lagi….

Oke deh.. sesuai dengan urutannya pertama kita harus buat database bernama ’dao_jdbc’ (ga harus sama juga ga apa – apa). Dengan berisi 3 tabel…. tabel fakultas, tabel jurusan dan tabel mahasiswa… tapi kita hanya akan menggunakan tabel mahasiswa saja… sisanya antum belajar sendiri dah…. hihih struktur tabel mahasiswa adalah sebagai berikut :

setelah selesai … kita buat entity class untuk tabel mahasiswa… seperti ini kode programmnya

package belajardao;

import java.util.Date;

public class Mahasiswa {

	public String npm, nama_depan, nama_belakang, tanggal_lahir;

	public int id_jurusan;

	public Mahasiswa() {
	}

	public String getNpm() {

		return npm;

	}

	public void setNpm(String npm) {

		this.npm = npm;

	}

	public String getNamaDepan() {

		return nama_depan;

	}

	public void setNamaDepan(String nama_depan) {

		this.nama_depan = nama_depan;

	}

	public String getNamaBelakang() {

		return nama_belakang;

	}

	public void setNamaBelakang(String nama_belakang) {

		this.nama_belakang = nama_belakang;

	}

	public String getTanggalLahir() {

		return tanggal_lahir;

	}

	public void setTanggalLahir(String tanggal_lahir) {

		this.tanggal_lahir = tanggal_lahir;

	}

	public int getIdJurusan() {

		return id_jurusan;

	}

	public void setIdJurusan(int id_jurusan) {

		this.id_jurusan = id_jurusan;

	}

}

pada entity class ini berisi method – method yang digunakan untuk setiap field yang ada di dalam tabel mahasiswa… setiap field punya dua method… yang merupakan method ”set” bertipe void dan method ”get” bertipe kembalian…..

Trus kalo udah kita buat interface nya…. oia…. interface ini berisi method abstrak yang mungkin akan digunakan untuk operasi databasenya seperti insert, update, delete dll…

package dao;

import belajardao.*;

import java.sql.*;

import java.util.*;

public interface mhsInterface {

	void insert(Mahasiswa mahasiswa) throws SQLException;

	void update(Mahasiswa mahasiswa) throws SQLException;

	void delete(Mahasiswa mahasiswa) throws SQLException;

	List<Mahasiswa> getAll() throws SQLException;

	Mahasiswa getByNpm(String npm) throws SQLException;

}

karena interface merupakan kumpulan method abstrak…. jadi tentu kita harus membuat class implementasi dari interface tersebut…… seperti inilah kode programmnya :

package impl;

import dao.*;

import belajardao.*;

import java.sql.*;

import java.util.*;

public class MahasiswaDaoImpl implements mhsInterface {

	private String SQL_INSERT = "INSERT INTO table_mahasiswa VALUES(?, ?, ?, ?, ?)";

	private String SQL_UPDATE = "UPDATE table_mahasiswa SET nama_depan=?, nama_belakang=?, tanggal_lahir=?, id_jurusan=? WHERE npm=?";

	private String SQL_DELETE = "DELETE FROM table_mahasiswa WHERE npm=?";

	private String SQL_GETALL = "SELECT * FROM table_mahasiswa";

	private String SQL_GETBYNPM = "SELECT * FROM table_mahasiswa WHERE npm=?";

	private Connection connection;

	public MahasiswaDaoImpl(Connection connection) {

		this.connection = connection;

	}

	public void insert(Mahasiswa mahasiswa) throws SQLException {

		PreparedStatement statement = null;

		ResultSet result = null;

		try {

			connection.setAutoCommit(false);

			statement = connection.prepareStatement(SQL_INSERT);

			statement.setString(1, mahasiswa.getNpm());

			statement.setString(2, mahasiswa.getNamaDepan());

			statement.setString(3, mahasiswa.getNamaBelakang());

			statement.setString(4, mahasiswa.getTanggalLahir());

			statement.setInt(5, mahasiswa.getIdJurusan());

			statement.executeUpdate();

			result = statement.getGeneratedKeys();

			if (result.next()) {

				mahasiswa.setIdJurusan(result.getInt(1));

				connection.commit();

			}

		} catch (SQLException e) {

			connection.rollback();

			throw e;

		} finally {

			try {

				connection.setAutoCommit(true);

				if (statement == null) {

					statement.close();

				}

				if (result == null) {

					result.close();

				}

			} catch (Exception e) {

			}

		}

	}

	public void update(Mahasiswa mahasiswa) throws SQLException {

		PreparedStatement statement = null;

		try {

			connection.setAutoCommit(false);

			statement = connection.prepareStatement(SQL_UPDATE);

			statement.setString(1, mahasiswa.getNamaDepan());

			statement.setString(2, mahasiswa.getNamaBelakang());

			statement.setString(3, mahasiswa.getTanggalLahir());

			statement.setInt(4, mahasiswa.getIdJurusan());

			statement.setString(5, mahasiswa.getNpm());

			statement.executeUpdate();

			connection.commit();

		} catch (SQLException e) {

			connection.rollback();

			throw e;

		} finally {

			try {

				connection.setAutoCommit(true);

				if (statement == null) {

					statement.close();

				}

			} catch (SQLException e) {

				throw e;

			}

		}

	}

	public void delete(Mahasiswa mahasiswa) throws SQLException {

		PreparedStatement statement = null;

		try {

			connection.setAutoCommit(false);

			statement = connection.prepareStatement(SQL_DELETE);

			statement.setString(1, mahasiswa.getNpm());

			statement.executeUpdate();

			connection.commit();

		} catch (SQLException e) {

			connection.rollback();

			throw e;

		} finally {

			try {

				connection.setAutoCommit(true);

				if (statement == null) {

					statement.close();

				}

			} catch (SQLException e) {

				throw e;

			}

		}

	}

	public List<Mahasiswa> getAll() throws SQLException {

		PreparedStatement statement = null;

		ResultSet result = null;

		try {

			List<Mahasiswa> list = new ArrayList<Mahasiswa>();

			connection.setAutoCommit(false);

			statement = connection.prepareStatement(SQL_GETALL);

			result = statement.executeQuery();

			while (result.next()) {

				Mahasiswa mahasiswa = new Mahasiswa();

				mahasiswa.setNpm(result.getString("npm"));

				mahasiswa.setNamaDepan(result.getString("nama_depan"));

				mahasiswa.setNamaBelakang(result.getString("nama_belakang"));

				mahasiswa.setTanggalLahir(result.getString("tanggal_lahir"));

				mahasiswa.setIdJurusan(result.getInt("id_jurusan"));

				list.add(mahasiswa);

			}

			connection.commit();

			return list;

		} catch (SQLException e) {

			throw e;

		} finally {

			try {

				connection.setAutoCommit(true);

				if (result != null) {

					result.close();

				}

				if (statement != null) {

					statement.close();

				}

			} catch (SQLException ex) {

				throw ex;

			}

		}

	}

	public Mahasiswa getByNpm(String npm) throws SQLException {

		PreparedStatement ps = null;

		ResultSet result = null;

		try {

			connection.setAutoCommit(false);

			ps = connection.prepareStatement(SQL_GETBYNPM);

			ps.setString(1, npm);

			result = ps.executeQuery();

			Mahasiswa mahasiswa = null;

			if (result.next()) {

				mahasiswa = new Mahasiswa();

				mahasiswa.setNpm(result.getString("npm"));

				mahasiswa.setNamaDepan(result.getString("nama_depan"));

				mahasiswa.setNamaBelakang(result.getString("nama_belakang"));

				mahasiswa.setTanggalLahir(result.getString("tanggal_lahir"));

				mahasiswa.setIdJurusan(result.getInt("id_jurusan"));

			}

			connection.commit();

			return mahasiswa;

		} catch (SQLException e) {

			throw e;

		} finally {

			try {

				connection.setAutoCommit(true);

				if (result != null) {

					result.close();

				}

				if (ps != null) {

					ps.close();

				}

			} catch (SQLException e) {

				throw e;

			}

		}

	}

}

Nah… kalo udah beres kita akan membuat class factory yang berkenaan dengan koneksi databasenya … seperti ini kode programnya :

package factory;

import dao.*;

import impl.*;

import java.sql.*;

import com.mysql.jdbc.Driver;

public class DaoFactory {

	private static Connection connection;

	private static FakultasDao fakultasdao;

	private static jurinterface jurusandao;

	private static mhsInterface mahasiswadao;

	private static Connection getConnection() throws SQLException {

		if (connection == null) {

			DriverManager.registerDriver(new Driver());

			String url = "jdbc:mysql://localhost:3306/dao_jdbc";

			String user = "muhammad";

			String pass = "123456";

			connection = DriverManager.getConnection(url, user, pass);

		}

		return connection;

	}

	public static mhsInterface getMhsInterface() throws SQLException {

		if (mahasiswadao == null) {

			mahasiswadao = new MahasiswaDaoImpl(getConnection());

		}

		return mahasiswadao;

	}

}

setelah semua selesai dengan baik…. maka yang terakhir harus dikerjakan adalah memanggil DAO pada class main – nya…. nah ini contohnya :

package maindao;

import javax.swing.*;

import java.awt.*;

import java.util.List;

import java.awt.event.*;

import javax.swing.table.*;

import gambar.*;

import belajardao.*;

import dao.*;

import factory.*;

import java.util.ArrayList;

public class MahasiswaFull {

	private JFrame frame;

	private JLabel judul, lblNpm, lblNamaDepan, lblNamaBelakang, lblTgl, lblId;

	private JTextField Npm, NamaDepan, NamaBelakang, Tgl, Id;

	private JButton btnNew, btnInsertUpdate, btnDelete, btnSearch;

	private JTable tabel;

	private DefaultTableModel model;

	private JScrollPane scroll;

	private ImageIcon iconJudul, iconInsert, iconUpdate, iconDelete, iconSearch, iconFrame;

	private JPanel panel1, panel2, panel3;

	public MahasiswaFull() {

		new tampilan();

		initkomponen();

		tampildata();

	}

	public void initkomponen() {

		iconJudul = new ImageIcon("src/gambar/geblek.png");

		judul = new JLabel("Data Mahasiswa Dengan DAO", iconJudul, JLabel.CENTER);

		judul.setFont(new Font("Arial", Font.BOLD, 18));

		judul.setSize(judul.getPreferredSize());

		panel1 = new JPanel();

		panel1.add(judul);

		lblNpm = new JLabel("NPM");

		lblNpm.setFont(new Font("Arial", Font.BOLD, 14));

		lblNpm.setBounds(80, 0, 100, 30);

		Npm = new JTextField(20);

		Npm.setFont(new Font("Arial", Font.BOLD, 14));

		Npm.setBounds(200, 0, 200, 30);

		lblNamaDepan = new JLabel("Nama Depan");

		lblNamaDepan.setFont(new Font("Arial", Font.BOLD, 14));

		lblNamaDepan.setBounds(80, 50, 100, 30);

		NamaDepan = new JTextField(20);

		NamaDepan.setFont(new Font("Arial", Font.BOLD, 14));

		NamaDepan.setBounds(200, 50, 200, 30);

		lblNamaBelakang = new JLabel("Nama Belakang");

		lblNamaBelakang.setFont(new Font("Arial", Font.BOLD, 14));

		lblNamaBelakang.setBounds(80, 100, 120, 30);

		NamaBelakang = new JTextField(20);

		NamaBelakang.setFont(new Font("Arial", Font.BOLD, 14));

		NamaBelakang.setBounds(200, 100, 200, 30);

		lblTgl = new JLabel("Tanggal Lahir");

		lblTgl.setFont(new Font("Arial", Font.BOLD, 14));

		lblTgl.setBounds(80, 150, 100, 30);

		Tgl = new JTextField(20);

		Tgl.setFont(new Font("Arial", Font.BOLD, 14));

		Tgl.setBounds(200, 150, 200, 30);

		lblId = new JLabel("ID Jurusan");

		lblId.setFont(new Font("Arial", Font.BOLD, 14));

		lblId.setBounds(80, 200, 100, 30);

		Id = new JTextField(20);

		Id.setFont(new Font("Arial", Font.BOLD, 14));

		Id.setBounds(200, 200, 200, 30);

		iconInsert = new ImageIcon("src/gambar/Save.png");

		btnNew = new JButton("New");

		btnNew.setIcon(iconInsert);

		btnNew.setMnemonic('I');

		btnNew.setLocation(80, 250);

		btnNew.setSize(btnNew.getPreferredSize());

		btnNew.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent ae) {

				clearteks();

			}

		});

		iconUpdate = new ImageIcon("src/gambar/Edit.png");

		btnInsertUpdate = new JButton("Insert");

		btnInsertUpdate.setIcon(iconUpdate);

		btnInsertUpdate.setMnemonic('U');

		btnInsertUpdate.setBounds(155, 250, 80, 28);

		// btnInsertUpdate.setSize(btnInsertUpdate.getPreferredSize());

		btnInsertUpdate.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent ae) {

				InsertUpdateAction();

			}

		});

		iconDelete = new ImageIcon("src/gambar/Delete.png");

		btnDelete = new JButton("Delete");

		btnDelete.setIcon(iconDelete);

		btnDelete.setMnemonic('D');

		btnDelete.setLocation(245, 250);

		btnDelete.setSize(btnDelete.getPreferredSize());

		btnDelete.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent ae) {

				deleteaction();

			}

		});

		iconSearch = new ImageIcon("src/gambar/Cari.png");

		btnSearch = new JButton("Search");

		btnSearch.setIcon(iconSearch);

		btnSearch.setMnemonic('S');

		btnSearch.setLocation(325, 250);

		btnSearch.setSize(btnSearch.getPreferredSize());

		btnSearch.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent ae) {

				searchaction();

			}

		});

		tabel = new JTable();

		tabel.addMouseListener(new MouseAdapter() {

			@Override
			public void mouseClicked(MouseEvent evt) {

				kliktabel();

			}

		});

		model = new DefaultTableModel();

		scroll = new JScrollPane();

		/*
		 * tabel.setModel(model);
		 *
		 * model.addColumn("Npm");
		 *
		 * model.addColumn("Nama Depan");
		 */

		scroll.setViewportView(tabel);

		scroll.setBounds(20, 290, 450, 180);

		scroll.setVerticalScrollBarPolicy(scroll.VERTICAL_SCROLLBAR_AS_NEEDED);

		scroll.setHorizontalScrollBarPolicy(scroll.HORIZONTAL_SCROLLBAR_AS_NEEDED);

		panel2 = new JPanel();

		panel2.add(lblNpm);

		panel2.add(Npm);

		panel2.add(lblNamaDepan);

		panel2.add(NamaDepan);

		panel2.add(lblNamaBelakang);

		panel2.add(NamaBelakang);

		panel2.add(lblTgl);

		panel2.add(Tgl);

		panel2.add(lblId);

		panel2.add(Id);

		panel2.add(btnNew);

		panel2.add(btnInsertUpdate);

		panel2.add(btnDelete);

		panel2.add(btnSearch);

		panel2.add(scroll);

		panel2.setLayout(null);

		iconFrame = new ImageIcon("src/gambar/iconFrame.png");

		frame = new JFrame("Data Mahasiswa Dengan DAO");

		frame.setIconImage(iconFrame.getImage());

		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		frame.setBounds(0, 0, 500, 650);

		frame.setResizable(false);

		frame.setLocationRelativeTo(null);

		frame.getContentPane().add(panel1, BorderLayout.NORTH);

		frame.getContentPane().add(panel2, BorderLayout.CENTER);

		frame.setVisible(true);

	}

	public void tampildata() {

		List<Mahasiswa> mahasiswa = new ArrayList<Mahasiswa>();

		try {

			Fakultas ganteng = new Fakultas();

			mhsInterface dao = DaoFactory.getMhsInterface();

			mahasiswa = dao.getAll();

			Object data[][] = new Object[mahasiswa.size()][5];

			int x = 0;

			for (Mahasiswa datamahasiswa : mahasiswa) {

				data[x][0] = datamahasiswa.getNpm();

				data[x][1] = datamahasiswa.getNamaDepan();

				data[x][2] = datamahasiswa.getNamaBelakang();

				data[x][3] = datamahasiswa.getTanggalLahir();

				data[x][4] = datamahasiswa.getIdJurusan();

				++x;

			}

			// model.addRow(data);

			String[] nakol = { "NPM", "Nama Depan", "Nama Belakang", "Tanggal Lahir", "ID Jurusan" };

			tabel.setModel(new DefaultTableModel(data, nakol));

			TableColumn col1 = tabel.getColumnModel().getColumn(0);

			TableColumn col2 = tabel.getColumnModel().getColumn(1);

			TableColumn col3 = tabel.getColumnModel().getColumn(2);

			TableColumn col4 = tabel.getColumnModel().getColumn(3);

			TableColumn col5 = tabel.getColumnModel().getColumn(4);

		} catch (Exception e) {

			JOptionPane.showMessageDialog(null, "Kesalahan Di " + e.getMessage());

		}

	}

	public void InsertUpdateAction() {

		try {

			int id_jurusan = Integer.valueOf(Id.getText());

			Mahasiswa mahasiswa = new Mahasiswa();

			mahasiswa.setNpm(Npm.getText());

			mahasiswa.setNamaDepan(NamaDepan.getText());

			mahasiswa.setNamaBelakang(NamaBelakang.getText());

			mahasiswa.setTanggalLahir(Tgl.getText());

			mahasiswa.setIdJurusan(id_jurusan);

			mhsInterface dao = DaoFactory.getMhsInterface();

			if (btnInsertUpdate.getText() == "Insert") {

				dao.insert(mahasiswa);

				JOptionPane.showMessageDialog(frame, "Data Berhasil Dimasukkan");

				clearteks();

			} else {

				btnInsertUpdate.setText("Update");

				dao.update(mahasiswa);

				JOptionPane.showMessageDialog(frame, "Data Berhasil Dirubah");

			}

			tampildata();

		} catch (Exception e) {

			JOptionPane.showMessageDialog(frame, "kesalahan di : " + e.getMessage());

		}

	}

	public void deleteaction() {

		if (Npm.getText().isEmpty()) {

			JOptionPane.showMessageDialog(frame, "Pilih Data Yang Akan Dihapus Pada Tabel Dibawah Ini");

		} else if (model.getRowCount() == 0) {

			JOptionPane.showMessageDialog(frame, "Tidak Ada Data di dalam tabel");

		} else {

			int pilih = JOptionPane.showConfirmDialog(frame, "Apa Anda Yakin Ingin Menghapus Data Ini..?", "Konfirmasi", JOptionPane.YES_NO_OPTION);

			if (pilih == 0) {

				try {

					Mahasiswa mhs = new Mahasiswa();

					mhs.setNpm(Npm.getText());

					mhsInterface dao = DaoFactory.getMhsInterface();

					dao.delete(mhs);

				} catch (Exception e) {

					JOptionPane.showMessageDialog(frame, "System mengalami kegagalan di " + e.getMessage());

				}

			} else {

			}

			clearteks();

			tampildata();

		}

	}

	public void searchaction() {

	}

	public void kliktabel() {

		int row_hasil = tabel.getSelectedRow();

		String npm = tabel.getValueAt(row_hasil, 0).toString();

		String namadepan = tabel.getValueAt(row_hasil, 1).toString();

		String namabelakang = tabel.getValueAt(row_hasil, 2).toString();

		String tgllahir = tabel.getValueAt(row_hasil, 3).toString();

		String idjurusan = tabel.getValueAt(row_hasil, 4).toString();

		Npm.setText(npm);

		NamaDepan.setText(namadepan);

		NamaBelakang.setText(namabelakang);

		Tgl.setText(tgllahir);

		Id.setText(idjurusan);

		btnInsertUpdate.setText("Update");

	}

	public void clearteks() {

		Npm.setText("");

		Npm.requestFocusInWindow();

		NamaDepan.setText("");

		NamaBelakang.setText("");

		Tgl.setText("");

		Id.setText("");

		btnInsertUpdate.setText("Insert");

	}

	public static void main(String[] args) {

		MahasiswaFull app = new MahasiswaFull();

	}

}

Sorry kalo kepanjangan …hehe coz ane buat user interfacenya manual … yang terakhir jangan lupa gunakan mysql connector java versi 5.16.. coz pengalaman ane pake yang versi 5.13 untuk insert data ga bisa…. selamat mencoba..

….download project lengkapnya

Disini……….




3 thoughts on “Contoh Penggunaan Data Access Object (DAO)Pada JAVA

  1. mas linknya bisa diperbaharui ? saya ada problem pas insert nih , ga ada eror tp pas di run database ga masuk @_@
    mysql dah versi 516 , program jalan tp database kosong , sementara primary key saya (auto increment) terus update .
    Makasih mas

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>