Tạo Ứng Dụng Quản Lý Sinh Viên Với JDBC Như Thế Nào?
JDBC là một API tiêu chuẩn được dùng để kết nối với các cơ sở dữ liệu. Bài viết này sẽ hướng dẫn cách sử dụng JDBC qua một ví dụ đơn giản bằng ngôn ngữ Java.
JDBC là một API tiêu chuẩn được dùng để kết nối với các cơ sở dữ liệu. Bài viết này sẽ hướng dẫn cách sử dụng JDBC qua một ví dụ đơn giản bằng ngôn ngữ Java.
JDBC là một API tiêu chuẩn được dùng để kết nối với các cơ sở dữ liệu. Bài viết này sẽ hướng dẫn các bạn đang học lập trình cách sử dụng JDBC qua một ví dụ đơn giản: tạo một ứng dụng quản lý sinh viên sử dụng ngôn ngữ Java, các bạn xem chi tiết ở bên dưới nhé.
Một cách đơn giản và ít phức tạp nhất, JDBC (Java Database Connectivity) là công cụ hoạt động như một driver giúp chúng ta kết nối cơ sở dữ liệu trong ứng dụng Java, giúp ứng dụng Java thực hiện kết nối và làm việc với cơ sở dữ liệu. Nó cho phép ta thực hiện các thao tác truy xuất, cập nhật dữ liệu hoặc nhiều thứ khác thông qua việc sử dụng các câu lệnh SQL.
Mô hình trực quan mối quan hệ, tính năng cũng như cách thức hoạt động
Config cho SQL Server
Để phần mềm (Java) của bạn có thể kết nối được với cơ sở dữ liệu, việc đầu tiên các bạn cần phải xác định hình thức kết nối và cổng kết nối cho database, ở đây mình sử dụng Database SQL Server (SQLJDBC) của Microsoft, cách bạn có thể tải về tại link bên dưới bài viết này. Ở ví dụ này, các bạn chỉ cần tạo database, mọi thông số như port các bạn có thể để mặc định (Port:1443) và bỏ qua bước này, hoặc các bạn đã thông hiểu sâu về SQL Server có thể tùy chỉnh lại config cho các instance của Server như hình dưới
Cài đặt cổng kết nối như trong hình vẽ, hãy nhớ số TCP Dynamic Ports, sau này sẽ dùng nhiều
Kích hoạt các Protocol như trong hình (nếu gặp lỗi)
Tạo database
Tiếp theo, đảm bảo bạn đã tạo một cơ sở dữ liệu trên SQL Server, chú ý khi tạo bạn hãy ghi nhớ tên của database cũng như tên của các đối tượng bạn tạo bên trong database này. Bên dưới là một database mẫu đơn giản mình đã tạo sẵn bằng SQL, các bạn có thể tải về ở cuối bài viết.
Cài đặt driver
Cuối cùng, hãy chắc chắn rằng thư viện điều khiển Database SQL Server (SQLJDBC) đã được thêm vào Java project của các bạn, các bạn tải về thư viện ở bên dưới bài viết và làm như trong ảnh, trong trường hợp project của các bạn đã có sẵn thư viện SQLJDBC thì hãy bỏ qua bước này.
Thêm thư viện sqljdbc phiên bản mới nhất để có thể sử dụng các thành phần của JDBC (Đã được nêu ở mục giới thiệu)
DatabaseInfo: Lưu trữ thông tin cơ bản của database
StudentManager: Lưu trữ các hàm thao tác cơ bản để quản lí các sinh viên trong cơ sở dữ liệu
GUI: Giao diện đồ họa của phần mềm
Validation (Chức năng phụ): Kiểm tra dữ liệu để tránh lỗi xảy ra trong cơ sở dữ liệu (trùng khóa chính, out of range, ...)
BƯỚC 1: Đầu tiên chúng ta tạo các thông tin cơ bản như sau, các bạn chú ý phần dbURL, tại đây hãy điền đúng port và tên database đã cài đặt ở phần 1 để có thể kết nối. Lưu ý có hai loại đăng nhập vào SQL Server: SQL authentication và Windows authentication, các bạn tham khảo 1 trong 2 cách (khuyến khích dùng cách 1).
public class DatabaseInfo { public static String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; //localhost:<PORT> databaseName=<Tên của database vừa tạo> public static String dbURL = "jdbc:sqlserver://localhost:8888;databaseName=University"; //Username và Password chừa trống, trong phần mềm sẽ nhập sau public static String dbUser = ""; public static String dbPass = ""; }
SQL authentication
public class DatabaseInfo { public static String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; //localhost:<PORT> databaseName=<Tên của database vừa tạo> public static String dbURL = "jdbc:sqlserver://localhost:8888;databaseName=University;integratedSecurity=true"; // Vẫn chừa trống, mặc dù không dùng public static String dbUser = ""; public static String dbPass = ""; }
Windows authentication
Lưu ý: SQL Server xác thực đăng nhập với 2 cơ chế: SQL authentication và Windows authentication.
Để tìm hiểu kỹ hơn về các khái niệm bảo mật trong database, các bạn có thể đón xem các blog sau này của mình. Ở ví dụ bên dưới, phần mềm quản lý sinh viên sẽ kết nối với hệ cơ sở dữ liệu qua hình thức SQL authentication.
BƯỚC 2: Khởi tạo kết nối, trả về một đối tượng Connection, hàm này các bạn có thể bỏ ở bất cứ nơi nào thuận tiện cho việc gọi kết nối sau này
public Connection getConnect() throws ClassNotFoundException, SQLException { Class.forName(DatabaseInfo.driverName); connection = DriverManager.getConnection(DatabaseInfo.dbURL, DatabaseInfo.dbUser, DatabaseInfo.dbPass); return connection; }
BƯỚC 3: Các hàm thao tác căn bản trong class StudentManagement
BƯỚC 4: Tạo giao diện đồ họa bằng JFrame
Như bài viết trước, ở đây mình không hướng dẫn sâu về cách hoạt động cũng như tạ JFrame, đây là các thành phần và chức năng chính trong phần mềm của mình, các bạn có thể tham khảo và tùy biến theo sở thích
Bước 5: Tạo đối tượng StudentManager để truy cập các hàm tại bước 3, LOAD dữ liệu vào phần mềm
StudentManager manager = new StudentManager();
Tạo đối tượng manager
public void actionPerformed(ActionEvent arg0) { try { // Tạo giao diện cho người dùng nhập username và password của database JPanel inputPane = new JPanel(); inputPane.setLayout(new GridLayout(0, 2, 2, 2)); JLabel label1 = new JLabel("Type database username: "); label1.setFont(new Font("Tahoma", Font.BOLD, 18)); JLabel label2 = new JLabel("Type database password: "); label2.setFont(new Font("Tahoma", Font.BOLD, 18)); // Tạo nơi điền username và password JTextField userName = new JTextField(); JTextField passWord = new JTextField(); inputPane.add(label1); inputPane.add(userName); inputPane.add(label2); inputPane.add(passWord); if (JOptionPane.showConfirmDialog(contentPane, inputPane, "To connect database, please type infomation below !", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE) == JOptionPane.YES_OPTION) { // Lấy username và password String user = userName.getText(); String pass = passWord.getText(); if ((user.isEmpty()) || (pass.isEmpty())) throw new Exception("Input was not correct"); DatabaseInfo.dbUser = user; DatabaseInfo.dbPass = pass; } else throw new Exception("Canceled by user"); // Tải dữ liệu từ database vào phần mềm data = manager.getAll(); // Thiết kế bảng dữ liệu để hiển thị header = new Vector<String>(); header.add("ID"); header.add("Name"); header.add("Gender"); header.add("Class"); header.add("Adress"); header.add("Email"); ((DefaultTableModel) (table.getModel())).setDataVector(data, header); // Kích hoạt các chức năng Add, Delete, tắt phần thông báo btnAdd.setEnabled(true); btnDelete.setEnabled(true); infomationPanel.setVisible(false); // Thông báo thành công JOptionPane.showMessageDialog(contentPane, "Load sucess!"); } catch (Exception e) { JOptionPane.showMessageDialog(contentPane, "Load failure!\nDetails: " + e); } }
Action Listener cho nút LOAD
BƯỚC 6: ADD và DELETE trên phần mềm, đồng nghĩa với dữ liệu trên cơ sở dữ liệu cũng sẽ thay đổi, bước này rất dễ sinh lỗi nếu các bạn không có một đối tượng Validation để kiểm tra dữ liệu nhập vào, các bạn có thể tham khảo code bên dưới, mình có chú dẫn từng dòng rất dễ hiểu.
protected void btnAddActionPerformed(ActionEvent arg0) { try { //Lấy dữ liệu nhập trên phần mềm String Sno = textField.getText(); String Sname = textField_1.getText(); String Sgender = getGender(); String Sclass = textField_2.getText(); String Sadress = textField_3.getText(); String Semail = textField_4.getText(); // Kiểm tra dữ liệu nhập vào, kiểm tra trùng khóa chính trong database if (manager.checkStudent(Sno)) throw new Exception("This student ID is already exits in database!"); if (!Validation.checkIdFormat(Sno)) throw new Exception("Id of student can not contain space!"); if (!Validation.checkNameFormat(Sname)) throw new Exception("Name of student can not contain special(s) character!"); if (!Validation.checkIdFormat(Sclass)) throw new Exception("Name of class can not contain special(s) character!"); if (!Validation.checkNameFormat(Sadress)) throw new Exception("Adress can not contain special(s) character!"); // Thêm dữ liệu vào database manager.addNew(Sno, Sname, Sgender, Sclass, Sadress, Semail); // Cập nhật hiển thị database cho phần mềm data = manager.getAll(); ((DefaultTableModel) (table.getModel())).setDataVector(data, header); // Thông báo thành công JOptionPane.showMessageDialog(contentPane, "Add Success!", "Sucess", JOptionPane.INFORMATION_MESSAGE); } catch (Exception e1) { JOptionPane.showMessageDialog(contentPane, "Add new failure\nDetails: " + e1, "Error", JOptionPane.ERROR_MESSAGE); } }
Action Listener cho nút ADD
protected void btnDeleteActionPerformed(ActionEvent e) { try { String Sno = textField.getText(); // Kiểm tra sinh viên có trong database hay không if (!manager.checkStudent(Sno)) throw new Exception("This student ID is not exits in database, So can delete!"); manager.delete(Sno); // Cập nhật lại dữ liệu hiển thị trên phần mềm data = manager.getAll(); ((DefaultTableModel) (table.getModel())).setDataVector(data, header); // Thông báo xóa thành công JOptionPane.showMessageDialog(contentPane, "Delete Success!", "Sucess", JOptionPane.INFORMATION_MESSAGE); } catch (Exception e1) { JOptionPane.showMessageDialog(contentPane, "Delete failure\nDetails:" + e1, "Error", JOptionPane.ERROR_MESSAGE); } }
Action Listener cho nút DELETE
(Các chức năng bổ sung như tìm kiếm sinh viên, tính điểm trung bình các bạn cũng làm tương tự)
BƯỚC 7: In dữ liệu ra file PDF
protected void btnPrintActionPerformed(ActionEvent e) { try { // Kiểm tra database trước khi in if (data.isEmpty()) throw new Exception("Make sure your load the database in order to print!"); // In vào file PDF, tiêu đề là University MessageFormat header = new MessageFormat("University"); MessageFormat footer = new MessageFormat(""); table.print(JTable.PrintMode.FIT_WIDTH, header, footer); } catch (Exception e1) { JOptionPane.showMessageDialog(contentPane, "Print failure\nDetails: " + e1); } }
Điền tên đăng nhập và mật khẩu, nếu các bạn dùng Windows authentication, hãy điền bất kỳ ký tự nào tại username và password.
Bắt buộc điền thông tin trước khi kết nối database
Kết nối thành công
Thao tác đơn giản
Thêm một sinh viên thành công
Nhờ có Validation, mọi dữ liệu nhập vào đều được đảm bảo đúng tiêu chuẩn, tránh lỗi database
Xóa một đối tượng ra khỏi cơ sở dữ liệu thành công
Lưu trữ cơ sở dữ liệu vào file PDF tiện cho việc in ấn sau này
Một danh sách sinh viên đã được lưu trữ thành công
Hiện nay, công nghệ JDBC đang rất được ưa chuộng, nhờ nó mà các phần mềm Java có thể kết nối một cách dễ dàng với hệ cơ sở dữ liệu. Các phần mềm game có thể lưu danh sách người chơi, các phần mềm quản lý nhân sự có thể dễ dàng quản lý các nhân viên của họ bằng việc sử dụng phần mềm thay vì thao tác trực tiếp trên cơ sở dữ liệu ở máy chủ.
Qua đây chỉ là một ví dụ nhỏ giúp các bạn hình dung được cách thức hoạt động của JDBC thông qua ứng dụng đơn giản này, trên thực tế để quản lý sinh viên thì cần nhiều tính năng hơn, các bạn hãy thử sức mình và sáng tạo thêm nhé. Mong các bạn luôn ủng hộ mình để mình tiếp tục ra thêm nhiều blog chất lượng khác, nếu các bạn thấy hay có thể chia sẻ cho nhiều người cùng đọc. Cuối cùng, cảm ơn các bạn đã đọc hết bài viết này.
Tải driver JDBC (SQLJDBC) cho SQL Server: tại đây
Project tham khảo (Esclipse_Java Project): tại đây
Database sử dụng trong bài viết (SQL): tại đây
Là một người may mắn được tiếp xúc với git từ rất sớm nên tôi gần như đã quen với các tiện ích mà git đã đem lại, nên lúc đi làm nhóm với các thành viên trong lớp tôi luôn cố gắng đưa sự tiện dụng đó vào công việc để giúp đỡ hoàn thiện dự án sớm hơn và câu trả lời luôn là không.
Hướng dẫn các bạn tạo một website CRUD nhanh gọn với SpringBoot và Hibernate trong Java, đây là một trong những chức năng cơ bản của một website hoàn chỉnh, bao gồm: C (Create Entity), R (Read Entity), U (Update Entity), D (Delete Entity)
Tài khoản ngân hàng của công ty X có 10 triệu. Tại một thời điểm, giám đốc rút thẻ thanh toán số tiền 5 triệu sau một bữa giao lưu với đối tác. Cùng lúc đó, tại văn phòng, nhân viên tài chính chuyển 7 triệu để mua sắm chuẩn bị cho sự kiện ngày mai. Chuyện gì sẽ xảy ra? Nếu cả hai giao dịch trên đều được thực hiện thì tổng cộng công ty X đã chi hết 12 triệu trong khi tài khoản mình chỉ có 10 triệu. Ngân hàng sẽ chịu lỗ 2 triệu.