Lập Trình Với Cơ Sở Dữ Liệu MySQL Bằng JDBC Trong Java - P1

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:

Java 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; } }
1234567891011121314151617181920212223242526272829303132333435363738394041424344 packagevn.com.stanford.laptrinhvoimysql; importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.SQLException; /** * * @author Dang Quang */publicclassDataProvider{//Khai báo báo driver để làm việc với mysqlprivatefinalstaticStringJDBC_DRIVER="com.mysql.jdbc.Driver";//Khai báo tên db cần làm việcprivatefinalstaticStringDATABASE_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 */publicstaticConnection ketNoi(){//Khai báo đối tượng kết nốiConnection conn=null;try{ //Nạp driver của mysql vào để sử dụngClass.forName(JDBC_DRIVER);//Thực hiện kết nối đến dbconn=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ốireturnconn;}}

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:

Java /* * 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; } }
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 /* * 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. */packagevn.com.stanford.laptrinhvoimysql; importjava.util.Date; /** * * @author Dang Quang */publicclassSinhVien{privateStringmaSV="";privateStringhoTen;privateStringdienThoai;privateStringemail;privateStringdiaChi;privateStringmaKhoa;privateintgioiTinh;privateDate ngaySinh; publicintgetGioiTinh(){returngioiTinh;} publicvoidsetGioiTinh(intgioiTinh){this.gioiTinh=gioiTinh;} publicDate getNgaySinh(){returnngaySinh;} publicvoidsetNgaySinh(Date ngaySinh){this.ngaySinh=ngaySinh;} publicStringgetMaKhoa(){returnmaKhoa;} publicvoidsetMaKhoa(StringmaKhoa){this.maKhoa=maKhoa;}publicSinhVien(){this.diaChi="Hà Nội";}/** * Hàm khởi tạo có 1 tham số truyền vào * @param diaChi */publicSinhVien(StringdiaChi){this.diaChi=diaChi;}/** * Hàm khởi tạo có 5 đối số * @param maSV * @param hoTen * @param dienThoai * @param email * @param diaChi */publicSinhVien(StringmaSV,StringhoTen,StringdienThoai,Stringemail,StringdiaChi){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 */publicvoidsetMaSV(StringmaSV){//Xử lý công việcif(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 */publicStringgetMaSV(){//Xử lý công việc ở đâyreturnmaSV;} publicStringgetHoTen(){returnhoTen;} publicvoidsetHoTen(StringhoTen){this.hoTen=hoTen;} publicStringgetDienThoai(){returndienThoai;} publicvoidsetDienThoai(StringdienThoai){this.dienThoai=dienThoai;} publicStringgetEmail(){returnemail;} publicvoidsetEmail(Stringemail){this.email=email;} publicStringgetDiaChi(){returndiaChi;} publicvoidsetDiaChi(StringdiaChi){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:

Java /** * 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; }
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 /** * Hàm lấy danh sách sinh viên trong db * * @return Danh sách sinh viên */publicList<SinhVien>layDanhSach(){//Khai báo 1 danh sáchList<SinhVien>lstSinhVien=newArrayList(); //Khai báo kết nốiConnection conn=null;try{ conn=DataProvider.ketNoi(); //Khai báo 1 công việcStringstrSQL="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ượngSinhVien objSV=null;//Đọc từng dòng thông tinwhile(rs.next()){//Khởi tạo đối tượngobjSV=newSinhVien();//Gán giá trị cho các thuộc tínhobjSV.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áchlstSinhVien.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ốiif(conn!=null){conn.close();}}catch(SQLException ex){Logger.getLogger(SinhVienBusiness.class.getName()).log(Level.SEVERE,null,ex);}} returnlstSinhVien;}

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:

Java 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); }
1234567891011121314151617181920212223242526272829303132333435363738 privatevoidformWindowOpened(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 */publicstaticvoidhienThiDanhSachSinhVien(){//Khai báo 1 đối tượng thuộc lớp SinhVienBusinessSinhVienBusiness sinhVienBusiness=newSinhVienBusiness();//Lấy danh sách sinh viên từ db của mysqlList<SinhVien>lstSinhVien=sinhVienBusiness.layDanhSach();//Khai báo các cột tiêu đề trên jtableStringcolTieuDe[]=newString[]{"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 jtableDefaultTableModel model=newDefaultTableModel(colTieuDe,0);Object[]row;for(SinhVien sv:lstSinhVien){row=newObject[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 modelmodel.addRow(row);}//Hiển thị vào jTablejTableSinhVien.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

4.9 / 5 ( 12 votes )

Bài viết liên quan:

  1. Làm việc với cơ sở dữ liệu MySQL bằng JDBC trong Java – P2
  2. Xuất bản ứng dụng trong Java
  3. Giới thiệu và hướng dẫn cài đặt môi trường học lập trình java
  4. Java Virtual Machine là gì? Những điều cần biết về JVM

Từ khóa » Kết Nối Java Với Mysql Bằng Jdbc