简体   繁体   中英

Login issue in java swing

I want to create a login page but it's not working properly. When I type in a username and password and click on the Login button, nothing is happening and I am not seeing any error message.

import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import javax.swing.*;
import java.awt.Graphics;
import java.awt.Color;
import java.awt.Font;

public class acclogin extends JFrame {
    Connection con;
    Statement st;
    ImageIcon bg = new ImageIcon("wb1.jpg");
    JFrame f = new JFrame("User Login");
    ResultSet rs;
    JLabel l = new JLabel("Username");
    JLabel l1 = new JLabel("Password");
    JLabel l2 = new JLabel(bg);
    JTextField t = new JTextField(15);
    JPasswordField t1 = new JPasswordField(15);
    JButton b = new JButton("Login");

    public acclogin() {
        frame();
    }

    public void frame() {
        f.setSize(620, 300);

        l.setBounds(10, 20, 100, 10);
        t.setBounds(100, 20, 100, 20);
        l1.setBounds(10, 50, 100, 80);
        t1.setBounds(100, 70, 100, 20);

        b.setBounds(100, 130, 100, 30);
        l2.setBounds(0, 0, 600, 300);

        f.add(l);
        f.add(t);
        f.add(l1);
        f.add(t1);

        f.add(b);
        f.add(l2);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);

        LoginButton lb = new LoginButton();
        b.addActionListener(lb);
    }

    class LoginButton implements ActionListener {
        public void actionPerformed(ActionEvent ae) {

            Object obj = ae.getSource();
            if (obj == b) {
                try {
                    String user = t.getText().trim();
                    String pass = t1.getText().trim();
                    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                    Connection con1 = DriverManager.getConnection("jdbc:odbc:balogin");
                    Statement stat;
                    stat = con1.createStatement();
                    ResultSet rs = stat.executeQuery("select * from Table1 where user='" + user + "' and pass='" + pass + "'");
                    System.out.println("select * from Table1 where user='" + user + "' and pass='" + pass + "'");
                    int count = 0;
                    while (rs.next()) {
                        {
                            count = count + 1;
                        }
                        if (count == 1) {
                            JOptionPane.showMessageDialog(null, "User Found,Access Granted");
                            ControlPanel cp1 = new ControlPanel();
                            cp1.display();
                        } else {
                            JOptionPane.showMessageDialog(null, "User not found");
                        }
                    }
                } catch (Exception ex) {
                }
            }
        }
    }

    public static void main(String args[]) {
        new acclogin();
    }

}

This is not exactly a solution for the problem, but this code has so many issues that you should solve before moving on.

This is what I would do:

  1. split the code into multiple methods to take apart UI code from working with database
  2. do not concat SQL query from strings, use prepared statement instead (omiting this could lead to an SQL injection, try login as ';DROP TABLE user;-- )
  3. usage of int count just for checking an existence of an element is confusing, you can use boolean or change SQL query to SELECT COUNT(*) ... or SELECT 1 IF EXISTS (SELECT * FROM ...)
  4. you do not have to check the action event source, it will be always be the login button unless you assign the listener to something else
  5. add e.printStackTrace() on catching exception
  6. I also believe that you should use JPasswordTextField.getPassword() instead of getText()
  7. remember closing ResultSet and Statement after use by calling .close()

try this :

Object obj = ae.getSource();
        if ((JButton)obj ==(JButton)b) {
         ......... }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM