Nội dung
- Tổng quan
- Hướng dẫn chi tiết
- 1. Kết nối với cơ sở dữ liệu
- 2. Thực hiện kiểm tra kết nối giữa IDE và MySQL
- 3. Thiết kế bảng dữ liệu trên MySql
- 4. Xử lý Form đăng nhập
- 5. Xử lý sự kiện khi người dùng đăng nhập (Sign In)
- 6. Xử lý sự kiện khi người dùng click vào “Cancel”
- 7. Xử lý sự kiện khi người dùng click vào “Logout”
- 8. Cài đặt ngày giờ cho App
- Tổng kết
Tổng quan
Hiện tại mình mới hoàn thành Case Study Module 2 với app “Tối nay ăn gì”. Ngoài những chức năng cơ bản của App thì mình có thực hiện việc tạo màn hình đăng nhập cho User và Admin. Ngoài ra, nếu người dùng chưa có tài khoản thì thực hiện luôn thao tác việc đăng ký tài khoản người dùng. Sau khi đăng ký thành công, khách hàng có thể thực hiện việc login để trải nghiệm App.
Về cơ bản mình dùng Java Swing + MySql để thực hiện thiết kế app và lưu trữ dữ liệu. Ngoài ra mình lựa chọn IDE NetBean để thực hiện dự án, NetBean khá tiện lợi cho việc thiết kế một app nếu so sánh với các IDE khác.
Bài viết hôm nay mình sẽ chia sẻ về cách tạo form đăng nhập với Java Swing + MySql (Admin – User) và hướng dẫn một chút để thực hiện việc phân quyền khi đăng nhập.
Hướng dẫn chi tiết
1. Kết nối với cơ sở dữ liệu
Để kết nối với MySQL chúng ta cần công cụ hỗ trợ, sau khi tạo thành công một project mới, việc thực hiện kết nối khá đơn giản.
“Mysql-connector-java-5.1.48”
Như vậy việc kết nối đã thành công.
2. Thực hiện kiểm tra kết nối giữa IDE và MySQL
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class JDBCConnection { public static Connection getJDBCConnection() throws SQLException { final String url = "jdbc:mysql://localhost:3306/testdb?autoReconnect=true&useSSL=false"; final String user = "root"; final String password = "123456"; try { Class.forName("com.mysql.jdbc.Driver"); return DriverManager.getConnection(url, user, password); } catch (ClassNotFoundException ex) { ex.printStackTrace(); } catch (SQLException ex) { ex.printStackTrace(); } return null; } public static void main(String[] args) throws SQLException { Connection connection = getJDBCConnection(); if (connection != null) { System.out.println("Data connection successful"); } else { System.out.println("Data connection failed"); } } }
3. Thiết kế bảng dữ liệu trên MySql
Tạo một bảng User trong cơ sở dữ liệu testdb
Bảng User bao gồm : ID, FULLNAME, USERNAME, PASSWORD, ROLE
4. Xử lý Form đăng nhập
4.1. Tạo JFrame Login
Chỉnh sửa lại các thông tin trong Form đăng nhập:
- WellCome Member Login: Label
- Please enter your username and password: Label
- Username: Label
- Password: Label
- Select Role: Lable
- Cancel + Sign In : Button
- File + Time UCT: Menu Bar
- Logout: Menu Item
- Nhập thông tin User: Text Field => Change Variable Name: jTextFieldUsername
- Nhập thông tin Password: Password Field => Change Variable Name: jPasswordFieldPassword
- Lựa chọn vai trò: Combo Box => Select – Admin – User
5. Xử lý sự kiện khi người dùng đăng nhập (Sign In)
Ở đây mình đăng mặc định người dùng đã có tài khoản rồi, và sau khi điền các thông tin chính xác. Chúng ta sẽ xử lý sự kiện khi người dùng click vào ô SIGN IN.
private void jButtonSignInActionPerformed(java.awt.event.ActionEvent evt) { String username = jTextFieldUsername.getText(); String password = String.valueOf(jPasswordFieldPassword.getPassword()); String option = jComboBox1.getSelectedItem().toString(); if (username.equals("") || password.equals("") || option.equals("Select")) { JOptionPane.showConfirmDialog(rootPane, "Some Fields Are is Empty", "Error", 1); } else { PreparedStatement pst = null; Connection conn = null; try { conn = JDBCConnection.getJDBCConnection(); String sql = "SELECT * FROM user WHERE USERNAME = ? AND PASSWORD = ?"; pst = conn.prepareStatement(sql); pst.setString(1, username); pst.setString(2, password); ResultSet resultSet = pst.executeQuery(); if (resultSet.next()) { String s1 = resultSet.getString("ROLE"); if (option.equalsIgnoreCase("Admin") && s1.equalsIgnoreCase("Role_Admin")) { JOptionPane.showMessageDialog(null, "Login Successfully"); } if (option.equalsIgnoreCase("User") && s1.equalsIgnoreCase("Role_User")) { JOptionPane.showMessageDialog(null, "Login Successfully"); } else { JOptionPane.showConfirmDialog(rootPane, "User Name or Password not Matched", "Login Error", 1); } } } catch (SQLException ex) { ex.printStackTrace(); } finally { if (pst != null) { try { pst.close(); } catch (SQLException ex) { Logger.getLogger(LoginJFrame.class.getName()).log(Level.SEVERE, null, ex); } } if (conn !=null) { try { conn.close(); } catch (SQLException ex) { Logger.getLogger(LoginJFrame.class.getName()).log(Level.SEVERE, null, ex); } } } } }
6. Xử lý sự kiện khi người dùng click vào “Cancel”
Khi người dùng click vào Cancel, chúng ta sẽ reset hết dữ liệu người dùng vừa nhập vào:
private void jButtonCancelActionPerformed(java.awt.event.ActionEvent evt) { jTextFieldUsername.setText(""); jPasswordFieldPassword.setText(""); jComboBox1.setSelectedItem("Select"); }
7. Xử lý sự kiện khi người dùng click vào “Logout”
Khi người dùng click vào Logout sẽ tự đăng xuất khỏi App
private void jMenuItemLogoutActionPerformed(java.awt.event.ActionEvent evt) { System.exit(0); }
8. Cài đặt ngày giờ cho App
public LoginJFrame() { initComponents(); this.setLocationRelativeTo(null); showTime(); } public void showTime() { Timer timer = new Timer(1000, new ActionListener() { @Override public void actionPerformed(ActionEvent e) { Date currentTimeDate = new Date(); jMenuTime.setText(currentTimeDate.toString()); } }); timer.start(); }
Tổng kết
Sau các bước trên thì chúng ta đã hoàn thành app đăng nhập cho nhiều vai trò khác nhau.
Trên đây chỉ là một phần nhỏ tạo form đăng nhập trong Case Study của mình. Chi tiết cụ thể hơn các bạn có thể tham khảo thêm toàn bộ Case của mình nhé:
https://github.com/AlexWoo176/Case-Study-Module-2-Java-Swing-MySQL
Author: Vũ Hoàng Tuấn
Đọc thêm về phương thức Autocomplete của jQuery tại đây
Xem thêm các video về Java tại CodeGym:
Aaaa
Trường tiểu học Thắng tam