登陆界面输入正确的密码也会报错


package ui;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import jiekou.accountjiekou;
import jiekouimp.Accountjiekouimp;
import db.Account;
public class Enter extends JFrame implements ActionListener {
    public static void main(String[] args) {
        Enter l = new Enter();
        l.Entertest();
    }
    JLabel tle,act,pwd;
    JTextField account,password;
    JButton entry,register;
    JPanel line,line1,line2,line3;
    public void Entertest() {
        // TODO Auto-generated constructor stub
        Container con=getContentPane();        
        con.setLayout(new GridLayout(4,1)); 
        //实例化所有的组件
        line=new JPanel();
        line1=new JPanel();
        line2=new JPanel();
        line3=new JPanel();
        tle=new JLabel("学生管理系统");
        tle.setFont(new Font("黑体", Font.PLAIN, 20));    
        act=new JLabel("账号:");
        pwd=new JLabel("密码:");
        entry=new JButton("登录");
        entry.addActionListener(this);    
        account=new JTextField(10);
        password=new JTextField(10);
        //将所以组件添加到面板
        line.add(tle);
        line1.add(act);
        line1.add(account);
        line2.add(pwd);
        line2.add(password);
        line3.add(entry);
        //将面板添加到容器
        con.add(line);
        con.add(line1);
        con.add(line2);
        con.add(line3);
        //设置页面标题,大小
        setTitle("登录");
        setSize(340,200);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    
    }
    //触发登录按钮后所产生的行为
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        Accountjiekouimp adi=new Accountjiekouimp();    //实例化账户接口实现类
        Account act=new Account();                //实例化一个账户对象
        if(adi.search(account.getText())!=null) {    //调用账户接口的search方法,判断数据库中所存的账户名称是否有与输入的账户相同的名称
            act=adi.search(account.getText());        //将返回的查询到的符合条件的数据暂存到act对象中
            if(act.getPassword().equals(password.getText())) {    //判断所输密码是否与数据库存储的相同
                this.setVisible(false);
                new Host().setVisible(true);        //账号密码均一致,显示主页面
            }else {
                new Error().setVisible(true);        //密码不一致,显示输入错误页面
            }
        }    
        else {
                new Error().setVisible(true);        //账号不一致,显示输入错误页面
            }
    }
}

img

看看数据库中的密码是否加密后的还是明文密码,如果拿输入的明文密码和加密后的比对肯定不对,要做对应的加密再比对

调试对比一下。。。也注意输入法问题。。。

SQL语句别写 * 直接写 name,password 做到精确查询字段值,如果多的话也全部写上。

1、直接写 name,password 做到精确查询字段值
2、通过name条件查询,name是主键吗,如果不是,假设有重名的,返回多条记录

1、在这段代码后act=adi.search(account.getText()); 输出System.put.println(act.getPassword());
2、如果System.put.println(act.getPassword()); 打印非空
3、再输出System.put.println(password.getText());
4、进行值对比