Tạo form đăng nhập với Java Swing + MySql (Admin – User)

Tạo form đăng nhập với Java Swing + MySql (Admin – User)

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:

Tạo form đăng nhậpTạo form đăng nhập

   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

Tạo form đăng nhậpTạo form đăng nhập

  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. 

Tạo form đăng nhậpTạo form đăng nhập

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