Ở bài viết trước tôi đã hướng dẫn các bạn kết nối và lấy được danh sách từ bảng trong MySQL. Trong phần này tôi sẽ tiếp tục hướng dẫn các bạn xử lý các chức năng thêm mới, hiển thị chi tiết, sửa và xóa thông tin với MySQL bằng JDBC trong lập trình java.
Xây dựng các hàm chức năng
Mục lục
Chúng ta sẽ tiếp tục xây dựng các hàm xử lý công việc trong lớp SinhVienBusiness.java như sau:
Hàm thêm mới thông tin sinh viên
Hàm này nhằm mục đích thực thi một câu lệnh insert để thêm mới thông tin vào trong bảng với dữ liệu lấy động từ giao diện thêm mới sinh viên được người dùng nhập vào như sau:
/**
* Hàm thêm mới thông tin sinh viên
*
* @param objSV, Đối tượng sinh viên cần thêm vào hệ thống
* @return True nếu thành công, False nếu thất bại
*/
public boolean themMoi(SinhVien objSV) {
Connection conn = null;
try {
//Khởi tạo kết nối
conn = DataProvider.ketNoi();
//Tạo công việc
String strInsert = "Insert into SinhVien(MaSV, HoTen, DienThoai, Email, DiaChi,"
+ "MaKhoa, GioiTinh, NgaySinh) values(?, ?, ?, ?, ?, ?, ?, ?)";
PreparedStatement comm = conn.prepareStatement(strInsert);
//Gán giá trị cho các tham số
comm.setString(1, objSV.getMaSV());
comm.setString(2, objSV.getHoTen());
comm.setString(3, objSV.getDienThoai());
comm.setString(4, objSV.getEmail());
comm.setString(5, objSV.getDiaChi());
comm.setString(6, objSV.getMaKhoa());
comm.setInt(7, objSV.getGioiTinh());
comm.setDate(8, new Date(objSV.getNgaySinh().getTime()));
//Thực hiện công việc
return comm.executeUpdate() > 0;
} catch (SQLException ex) {
System.err.println("Có lỗi không thêm được thông tin. Chi tiết: " + ex.getMessage());;
} finally {
try {
//Đóng kết nối
if (conn != null) {
conn.close();
}
} catch (SQLException ex) {
Logger.getLogger(SinhVienBusiness.class.getName()).log(Level.SEVERE, null, ex);
}
}
return false;
}
Hàm lấy thông tin chi tiết của sinh viên
Mục đích của hàm này sử dụng để lấy thông tin chi tiết của một sinh viên trả về kiểu đối tượng với đầu vào là mã sinh viên cần lấy để hiển thị lên giao diện sửa thông tin sinh viên trước khi thay đổi thông tin mới với nội dung như sau:
/**
* Hàm lấy thông tin chi tiết của sinh viên
*
* @param maSV, mã sinh viên cần lấy thông tin
* @return Đối tượng chứa thông tin chi tiết của sinh viên
*/
public SinhVien layChiTiet(String maSV) {
//Khai báo 1 đối tượng
SinhVien objSV = null;
//Khai báo kết nối
Connection conn = null;
try {
conn = DataProvider.ketNoi();
//Khai báo 1 công việc
String strSQL = "Select MaSV, HoTen, DienThoai, Email, DiaChi, MaKhoa, "
+ "GioiTinh, NgaySinh "
+ " from SinhVien where MaSV = '" + maSV + "'";
//SQL Injection
Statement comm = conn.createStatement();
//Thực hiện và trả về kết quả
ResultSet rs = comm.executeQuery(strSQL);
//Đọc từng dòng thông tin
while (rs.next()) {
//Khởi tạo đối tượng
objSV = new SinhVien();
//Gán giá trị cho các thuộc tính
objSV.setMaSV(rs.getString("MaSV"));
objSV.setHoTen(rs.getString("HoTen"));
objSV.setDienThoai(rs.getString("DienThoai"));
objSV.setEmail(rs.getString("Email"));
objSV.setMaKhoa(rs.getString("MaKhoa"));
objSV.setGioiTinh(rs.getInt("GioiTinh"));
objSV.setNgaySinh(rs.getDate("NgaySinh"));
}
} catch (SQLException ex) {
System.out.println("Có lỗi xảy ra trong quá trình làm việc với mysql. "
+ "Chi tiết: " + ex.getMessage());
} finally {
try {
//Đóng kết nối
if (conn != null) {
conn.close();
}
} catch (SQLException ex) {
Logger.getLogger(SinhVienBusiness.class.getName()).log(Level.SEVERE, null, ex);
}
}
return objSV;
}
Hàm cập nhật thông tin thay đổi của sinh viên bằng lập trình java bằng jdbc
Đây là hàm sử dụng câu lệnh update để cập nhật thông tin thay đổi của sinh viên sau khi người dùng nhấn nút sửa trên giao diện danh sách với các nội dung như sau:
/**
* Hàm cập nhật thông tin mới cho sinh viên cần sửa
*
* @param objSV, Đối tượng sinh viên chứa các thông tin mới cần cập nhật
* @return True nếu cập nhật thành công, False nếu thất bại
*/
public boolean capNhat(SinhVien objSV) {
Connection conn = null;
try {
//Khởi tạo kết nối
conn = DataProvider.ketNoi();
//Tạo công việc
String strUpdate = "Update SinhVien set HoTen=?, DienThoai=?, Email=?,"
+ "GioiTinh=?, NgaySinh=?, DiaChi=?, MaKhoa=? where MaSV = ?";
PreparedStatement comm = conn.prepareStatement(strUpdate);
//Gán giá trị cho các tham số
comm.setString(1, objSV.getHoTen());
comm.setString(2, objSV.getDienThoai());
comm.setString(3, objSV.getEmail());
comm.setInt(4, objSV.getGioiTinh());
comm.setDate(5, new Date(objSV.getNgaySinh().getTime()));
comm.setString(6, objSV.getDiaChi());
comm.setString(7, objSV.getMaKhoa());
comm.setString(8, objSV.getMaSV());
//Thực hiện công việc
return comm.executeUpdate() > 0;
} catch (SQLException ex) {
Logger.getLogger(SinhVienBusiness.class.getName()).log(Level.SEVERE, null, ex);
} finally {
try {
//Đóng kết nối
if (conn != null) {
conn.close();
}
} catch (SQLException ex) {
Logger.getLogger(SinhVienBusiness.class.getName()).log(Level.SEVERE, null, ex);
}
}
return false;
}
Hàm xóa thông tin sinh viên
Hàm này sẽ thực hiện câu lệnh Delete trong SQL để xóa thông tin mã sinh viên được truyền vào lấy từ việc chọn sinh viên trên danh sách của jTable như sau:
/**
* Hàm xóa thông tin sinh viên
* @param maSV, mã sinh viên cần xóa
* @return True nếu thành công, False nếu thất bại
*/
public boolean xoaSinhVien(String maSV) {
Connection conn = null;
try {
//Khởi tạo kết nối
conn = DataProvider.ketNoi();
Statement comm = conn.createStatement();
//Câu lệnh thực hiện
String strDelete = "Delete from SinhVien where MaSV = '"
+ maSV + "'";
//Thực hiện xóa và trả về kết quả
return comm.executeUpdate(strDelete) > 0;
} catch (SQLException ex) {
Logger.getLogger(SinhVienBusiness.class.getName()).log(Level.SEVERE, null, ex);
} finally {
try {
//Đóng kết nối
if (conn != null) {
conn.close();
}
} catch (SQLException ex) {
Logger.getLogger(SinhVienBusiness.class.getName()).log(Level.SEVERE, null, ex);
}
}
return false;
}
Các bạn học lập trình java cần chú ý thực hiện viết đúng các hàm trên trong lớp SinhVienBusiness.java trước khi chuyển sang phần thiết kế giao diện thêm mới, cập nhật thông tin sinh viên.
Thiết kế giao diện thêm mới, cập nhật thông tin sinh viên
Đây là giao diện để người dùng có thể thực hiện thêm mới một thông tin hoặc cập nhật lại thông tin thay đổi cho một sinh viên đã có trong bảng trên MySQL bằng JDBC. Các bạn sử dụng những đối tượng control đã được học bằng java swing để thiết kế giao diện như sau:

Giao diện này có tên là frmSinhVienAdd.java sử dụng để xử lý trong 2 trường hợp thêm mới, cập nhật sinh viên do vậy chúng ta sẽ mở giao diện code (nhấn vào tab source) của lớp frmSinhVienAdd thêm một thuộc tính mã sinh viên để lưu dữ liệu trong trường hợp sửa thông tin sinh viên như sau:
/**
* Sử dụng thuộc tính này để lưu thông mã sinh viên lấy từ danh sách truyền lên trong
* TH sửa
*/
private String maSinhVien = "";
public String getMaSinhVien()
{
return maSinhVien;
}
public void setMaSinhVien(String maSinhVien)
{
this.maSinhVien = maSinhVien;
}
Sau đó viết hàm xử lý hiển thị thông tin chi tiết trong trường hợp sửa trong lớp frmSinhVienAdd.java như sau:
private void formWindowOpened(java.awt.event.WindowEvent evt) {
if(!maSinhVien.isEmpty())
{
//TH sửa
this.setTitle("Sửa thông tin sinh viên");
//Hiển thị thông chi tiết của sinh viên cần sửa
hienThiChiTietSinhVien();
}
else
{
//TH thêm mới
this.setTitle("Thêm mới thông tin sinh viên");
}
}
Hàm hiển thị thông tin chi tiết của sinh viên lên giao diện frmSinhVienAdd.java như sau:
/**
* Hàm hiển thị thông tin chi tiết của sinh viên trong TH sửa
*/
private void hienThiChiTietSinhVien()
{
//Khai báo 1 đối tượng
SinhVienBusiness sinhVienBusiness = new SinhVienBusiness();
//Lấy thông tin chi tiết của sinh viên
SinhVien objSV = sinhVienBusiness.layChiTiet(maSinhVien);
txtMaSV.setText(maSinhVien);
txtMaSV.setEnabled(false);
if(objSV != null)
{
//Hiển thị lên giao diện
txtHoTen.setText(objSV.getHoTen());
txtDienThoai.setText(objSV.getDienThoai());
txtEmail.setText(objSV.getEmail());
txtDiaChi.setText(objSV.getDiaChi());
if(objSV.getGioiTinh()==1)
{
rbtnNu.setSelected(true);
}
else
{
rbtnNam.setSelected(true);
}
jDateChooserNgaySinh.setDate(objSV.getNgaySinh());
}
}
Hàm xử lý thêm mới hoặc cập nhật thông tin khi nhấn nút cập nhật trên giao diện frmSinhVienAdd.java như sau:
private void btnCapNhatActionPerformed(java.awt.event.ActionEvent evt) {
//Khai báo 1 đối tượng sinh viên
SinhVien objSV = new SinhVien();
//Lấy thông tin trên giao diện cho các thuộc tính của objSV
objSV.setMaSV(txtMaSV.getText());
objSV.setHoTen(txtHoTen.getText());
objSV.setDienThoai(txtDienThoai.getText());
objSV.setEmail(txtEmail.getText());
objSV.setDiaChi(txtDiaChi.getText());
if(rbtnNu.isSelected())
{
objSV.setGioiTinh(1);
}
else//Nam
{
objSV.setGioiTinh(0);
}
objSV.setNgaySinh(jDateChooserNgaySinh.getDate());
//Lấy thông tin khoa chọn trên giao diện
String maKhoa = "";
ChuyenKhoa objKhoa = (ChuyenKhoa)cboKhoa.getSelectedItem();
if(objKhoa != null)
{
maKhoa = objKhoa.getMaKhoa();
}
objSV.setMaKhoa(maKhoa);
boolean kq;
//Khai báo đối tượng
SinhVienBusiness sinhVienBusiness = new SinhVienBusiness();
if(!maSinhVien.isEmpty())//TH sửa
{
kq = sinhVienBusiness.capNhat(objSV);
}
else
{
kq = sinhVienBusiness.themMoi(objSV);
}
if(kq)//Nếu thực hiện thành công
{
JOptionPane.showMessageDialog(rootPane, "Cập nhật thông tin sinh viên thành công");
//Reload lại danh sách
frmDanhSachSinhVien.hienThiDanhSachSinhVien();
}
}
Xử lý gọi giao diện thêm mới, sửa từ giao diện danh sách sinh viên
Để gọi giao diện thêm mới hoặc cập nhật thông tin sinh viên từ giao diện danh sách sinh viên, các bạn học lập trình java cần thực hiện nhấp đúp vào nút Thêm mới, sửa trên giao diện của frmDanhSachSinhVien.java sau đó viết các đoạn code java tương ứng đó là:
private void btnThemActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
frmSinhVienAdd frmThemMoi = new frmSinhVienAdd();
//Hiển thị thông tin
frmThemMoi.setVisible(true);
}
private void btnSuaActionPerformed(java.awt.event.ActionEvent evt) {
//Khai báo biến
String maSV = "";
int dongChon = 0;
frmSinhVienAdd frmSua = new frmSinhVienAdd();
//Lấy chỉ số dòng chọn trên jtable
dongChon = jTableSinhVien.getSelectedRow();
//Lấy thông tin mã sinh viên của dòng chọn
maSV = "" + jTableSinhVien.getValueAt(dongChon, 0);
//Truyền mã sinh viên lên giao diện sửa
frmSua.setMaSinhVien(maSV);
//Hiển thị thông tin
frmSua.setVisible(true);
}
Xử lý xóa thông tin sinh viên
Nhấn đúp vào nút Xóa trên giao diện frmDanhSachSinhVien.java để viết mã lệnh xử lý lấy thông tin mã sinh viên trên giao diện jTable được chọn để thực hiện xóa trong cơ sở dữ liệu MySQL bằng JDBC như sau:
private void btnXoaActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
int ketQua = JOptionPane.showConfirmDialog(rootPane, "Bạn có chắn chắn muốn xóa thông tin này ?",
"Thông báo", JOptionPane.WARNING_MESSAGE, JOptionPane.YES_NO_OPTION);
if(ketQua == JOptionPane.YES_OPTION)
{
//Khai báo biến
String maSV = "";
int dongChon = 0;
//Lấy chỉ số dòng chọn trên jtable
dongChon = jTableSinhVien.getSelectedRow();
//Lấy thông tin mã sinh viên của dòng chọn
maSV = "" + jTableSinhVien.getValueAt(dongChon, 0);
//Khai báo đối tượng
SinhVienBusiness sinhVienBusiness = new SinhVienBusiness();
//Thực hiện xóa từ db
boolean isXoa = sinhVienBusiness.xoaSinhVien(maSV);
if(isXoa)
{
//Reload lại danh sách
hienThiDanhSachSinhVien();
}
}
}
Sau khi thực hiện cài đặt các chức năng thành công sẽ được giao diện như hình sau:

Như vậy qua bài viết này tôi đã hướng dẫn xong các bạn học lập trình java cài đặt các chức năng thêm mới, hiển thị chi tiết, sửa và xóa thông tin với bảng SinhVien trong MySQL bằng JDBC. Các bạn đọc kỹ và làm theo hướng dẫn nếu có khó khăn gì có thể comment hoặc hỏi trực tiếp tôi. Chúc các bạn thành công !
Xem phần 1: Làm việc với cơ sở dữ liệu MySQL bằng JDBC trong Java tại đây
=============================
☎ STANFORD – ĐÀO TẠO VÀ PHÁT TRIỂN CÔNG NGHỆ
Hotline: 0963 723 236 – 0866 586 366
Website: https://stanford.com.vn
Facebook:
Youtube:


