Trong bài viết này Stanford sẽ hướng dẫn các bạn học lập trình java làm việc với cơ sở dữ liệu MySQL bằng JDBC để kết nối, lấy danh sách và xử lý công việc trên MySQL bằng lập trình java.
Trong seri chủ đề các bài viết này sẽ hướng dẫn sử dụng Java Swing và MySQL để xây dựng một phần mềm quản lý thông tin sinh viên bằng Java.
Thiết kế cơ sở dữ liệu trong MySQL
Sau khi kết nối vào MySQL Server bằng công cụ WorkBench chúng ta cần tạo một schema mới có tên “java_stanford” sau đó thiết kế bảng sinh viên với cấu trúc như sau:
Thực hiện nhập một số thông tin cho bảng bằng việc chuột phải vào bảng SinhVien trên menu trái chọn “Select Rows“
Sau khi nhập xong nhấn Apply để lưu thông tin lại vào trong bảng. Tiếp tục nhập dữ liệu cho bảng ChuyenKhoa như sau:
Tạo dự án và xây dựng các lớp xử lý với MySQL bằng JDBC
Như vậy là công việc thiết kế cơ sở dữ liệu, bảng lưu trữ thông tin trong MySQL đã hoàn tất. Tiếp đến các bạn học lập trình java tiếp tục tạo một dự án mới trong netbean chọn Java Application như sau:
Sau khi tạo dự án thành công tạo một lớp có tên DataProvider để khai báo thông tin và hàm kết nối đến MySQL cần làm việc như sau:
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 |
package vn.com.stanford.laptrinhvoimysql; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; /** * * @author Dang Quang */ public class DataProvider { //Khai báo báo driver để làm việc với mysql private final static String JDBC_DRIVER = "com.mysql.jdbc.Driver"; //Khai báo tên db cần làm việc private final static String DATABASE_LINK = "jdbc:mysql://localhost:3306/java_stanford?useSSL=false"; /** * Hàm kết nối đến db trong MySQL cần làm việc * @return */ public static Connection ketNoi() { //Khai báo đối tượng kết nối Connection conn = null; try { //Nạp driver của mysql vào để sử dụng Class.forName(JDBC_DRIVER); //Thực hiện kết nối đến db conn = DriverManager.getConnection(DATABASE_LINK, "root", "Stanford2012"); } catch (ClassNotFoundException ex) { System.err.println("Không tìm thấy driver. Chi tiết: " + ex.getMessage()); } catch (SQLException ex) { System.err.println("Không kết nối được đến MySQL. Chi tiết: " + ex.getMessage()); } //Trả về kết nối return conn; } } |
Chú ý: Các bạn cần thay tên cơ sở dữ liệu và thông tin mysql giống như trên máy cài đặt mysql của các bạn
Xây dựng lớp SinhVien.java
Lớp này sẽ chứa các thuộc tính tương ứng với bảng SinhVien được thiết kế trong MySQL như sau:
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 |
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package vn.com.stanford.laptrinhvoimysql; import java.util.Date; /** * * @author Dang Quang */ public class SinhVien { private String maSV = ""; private String hoTen; private String dienThoai; private String email; private String diaChi; private String maKhoa; private int gioiTinh; private Date ngaySinh; public int getGioiTinh() { return gioiTinh; } public void setGioiTinh(int gioiTinh) { this.gioiTinh = gioiTinh; } public Date getNgaySinh() { return ngaySinh; } public void setNgaySinh(Date ngaySinh) { this.ngaySinh = ngaySinh; } public String getMaKhoa() { return maKhoa; } public void setMaKhoa(String maKhoa) { this.maKhoa = maKhoa; } public SinhVien() { this.diaChi = "Hà Nội"; } /** * Hàm khởi tạo có 1 tham số truyền vào * @param diaChi */ public SinhVien(String diaChi) { this.diaChi = diaChi; } /** * Hàm khởi tạo có 5 đối số * @param maSV * @param hoTen * @param dienThoai * @param email * @param diaChi */ public SinhVien(String maSV, String hoTen, String dienThoai, String email, String diaChi) { this.maSV = maSV; this.hoTen = hoTen; this.dienThoai = dienThoai; this.email = email; this.diaChi = diaChi; } //Gán giá trị cho biến này /** * Thiết lập giá trị cho biến maSV * @param maSV */ public void setMaSV(String maSV) { //Xử lý công việc if(maSV.contains("SF")) { System.out.println("Đây là học viên của Stanford"); } this.maSV = maSV; } /** * Lấy giá trị biến maSV * @return */ public String getMaSV() { //Xử lý công việc ở đây return maSV; } public String getHoTen() { return hoTen; } public void setHoTen(String hoTen) { this.hoTen = hoTen; } public String getDienThoai() { return dienThoai; } public void setDienThoai(String dienThoai) { this.dienThoai = dienThoai; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getDiaChi() { return diaChi; } public void setDiaChi(String diaChi) { this.diaChi = diaChi; } } |
Xây dựng lớp SinhVienBusiness.java
Đây là lớp sẽ viết các hàm xử lý bao gồm lấy danh sách, thêm mới, sửa, chi tiết sinh viên, xóa,…với bảng SinhVien trong MySQL. Hàm xử lý lấy danh sách sinh viên từ MySQL như sau:
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 |
/** * Hàm lấy danh sách sinh viên trong db * * @return Danh sách sinh viên */ public List<SinhVien> layDanhSach() { //Khai báo 1 danh sách List<SinhVien> lstSinhVien = new ArrayList(); //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" + " from SinhVien"; Statement comm = conn.createStatement(); //Thực hiện và trả về kết quả ResultSet rs = comm.executeQuery(strSQL); //Khai báo đối tượng SinhVien objSV = null; //Đọ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")); //Thêm vào danh sách lstSinhVien.add(objSV); } } 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 lstSinhVien; } |
Tạo frame có tên frmDanhSachSinhVien
Lớp này kế thừa từ JFrame để tạo ra một giao diện đồ họa sử dụng java swing và thực hiện thiết kế như hình dưới:
Viết hàm xử lý hiển thị danh sách sinh viên lên jTable và gọi ra trong sự kiện formWindowOpened của frmDanhSachSinhVien như sau:
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 |
private void formWindowOpened(java.awt.event.WindowEvent evt) { //Gọi hàm hiển thị danh sách khi form mở hienThiDanhSachSinhVien(); } /** * Hàm xử lý hiển thị danh sách lên jtable */ public static void hienThiDanhSachSinhVien() { //Khai báo 1 đối tượng thuộc lớp SinhVienBusiness SinhVienBusiness sinhVienBusiness = new SinhVienBusiness(); //Lấy danh sách sinh viên từ db của mysql List<SinhVien> lstSinhVien = sinhVienBusiness.layDanhSach(); //Khai báo các cột tiêu đề trên jtable String colTieuDe[] = new String[]{"Mã SV", "Họ tên", "Điện thoại", "Email" , "Địa chỉ"}; //Khai báo 1 đối tượng để đưa dữ liệu vào jtable DefaultTableModel model = new DefaultTableModel(colTieuDe, 0); Object[] row; for(SinhVien sv : lstSinhVien) { row = new Object[5]; row[0] = sv.getMaSV(); row[1] = sv.getHoTen(); row[2] = sv.getDienThoai(); row[3] = sv.getEmail(); row[4] = sv.getDiaChi(); //Thêm vào model model.addRow(row); } //Hiển thị vào jTable jTableSinhVien.setModel(model); } |
Thực hiện chuột phải vào project chọn properties => Trong mục Libraries thêm thư viện mysql driver vào. Sau đó chạy frmDanhSachSinhVien nếu hiển thị kết quả như hình dưới là bạn đã kết nối và lấy được danh sách trong bảng SinhVien trong MySQL thành công.
Hy vọng với hướng dẫn chi tiết trong bài viết các bạn học lập trình java đã hiểu hơn và lấy được dữ liệu từ trong bảng của mysql. Ở phần kế tiếp tôi sẽ hướng dẫn thiết kế giao diện thêm mới, hiển thị thông tin chi tiết trước khi sửa bằng java swing. Bên cạnh đó bạn muốn học lập trình java qua dự án cùng chuyên gia giàu kinh nghiệm Stanford có thể tham khảo thêm khóa học: tại đây