Bang.格鲁↵ 2023-06-13 09:26 采纳率: 100%
浏览 177
已结题

使用JDBC运行程序出现Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 的报错

今天写了个制作用户登录界面的卓业,通过连接数据库来判断用户密码是否正确
但是在把账号密码都输入完成时,一旦点击“登录”按钮,就会出现空指针异常的报错。
我看了下好像是Connection 对象dbConn出现null了,但是不知道怎么解决。

img

img

代码如下,我写了主类Demo,检查类Check和SQL设置类SQL
Demo类:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;

class User_UI extends JFrame implements ActionListener {
    JLabel jLabel1 = new JLabel("用户名:");
    JLabel jLabel2 = new JLabel("    密码:");
    JTextField txt_account = new JTextField(20);
    JTextField txt_password = new JTextField(20);
    JButton sign_up = new JButton("注册");//注册
    JButton log_in = new JButton("登录");//登录
    public void Display() {
        setTitle("注册登录");
        setLayout(new BorderLayout());
        JPanel jpl_North = new JPanel();
        JPanel jpl_Center = new JPanel();
        JPanel jpl_South = new JPanel();
        //↓动作监听器
        sign_up.addActionListener(this);
        log_in.addActionListener(this);

        {//图形界面设计模块
            //三组容器嵌套
            jpl_North.add(jLabel1);
            jpl_North.add(txt_account);
            add(jpl_North, BorderLayout.NORTH);

            jpl_Center.add(jLabel2);
            jpl_Center.add(txt_password);
            add(jpl_Center, BorderLayout.CENTER);

            jpl_South.add(log_in);
            jpl_South.add(sign_up);
            add(jpl_South, BorderLayout.SOUTH);
            setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
            setSize(500, 300);
            setResizable(true);
            setVisible(true);
        }
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource() == log_in) {
            try {
                new Check().log_in_Check(txt_account.getText());//将账户名传入登录检查函数
            } catch (SQLException ex) {
                throw new RuntimeException(ex);
            }
        }
    }
}
public class Demo9_3 {
    public static void main(String[] args) {
        new User_UI().Display();
    }
}


Check类:

import javax.swing.*;
import java.sql.ResultSet;
import java.sql.SQLException;

class Check {
    ResultSet rs1;

    public void log_in_Check(String account) throws SQLException {//登录检查方法
        rs1 = new SQL().Sql_sate("select * from S_user");//从表中
        while (rs1.next()) {
            if (account.equals(rs1.getString(1))) {
                ;//如果检查到当前行与用户名相等
                while (rs1.next()) {
                    if (account.equals(rs1.getString(2))){
                        JOptionPane.showMessageDialog(null,"密码正确,登陆成功!","提示",2);
                    break;}
                    else{
                        JOptionPane.showMessageDialog(null,"密码错误!","提示",2);
                        break;
                    }
                }
            }
        }
        JOptionPane.showMessageDialog(null,"无此用户","提示",2);
    }

}

SQL设置类:

import java.sql.*;
public class SQL {
    String driverName = "com.mysql.cj.jdbc.Driver";
    // 加载JDBC驱动
    String dbURL = "jdbc:mysql://localhost:3306/s_user?serverTimezone=UTC";
    // 连接服务器和数据库
    String userName = "root"; // 默认用户名
    String userPwd = "123456"; // 密码
    Connection dbConn;
    ResultSet rs;
    public void Sql_set() throws SQLException {

        try {
            Class.forName(driverName);
            dbConn = DriverManager.getConnection(dbURL, userName, userPwd);
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
    }
    public ResultSet Sql_sate(String sql) throws SQLException {//SQL传入语句方法,返回查询结果。
        Statement statement = dbConn.createStatement();
        rs = statement.executeQuery(sql);//
        return rs;
    }

}

这是我在数据库中建立的两个用户信息:

img

想请教一下,鞋些

  • 写回答

1条回答 默认 最新

  • 心寒丶 全栈领域优质创作者 2023-06-13 09:34
    关注

    这里为空了,SQL 这样改一下

    img

     
    import java.sql.*;
    public class SQL {
        String driverName = "com.mysql.cj.jdbc.Driver";
        // 加载JDBC驱动
        String dbURL = "jdbc:mysql://localhost:3306/s_user?serverTimezone=UTC";
        // 连接服务器和数据库
        String userName = "root"; // 默认用户名
        String userPwd = "123456"; // 密码
        Connection dbConn;
        ResultSet rs;
        public Connection Sql_set() throws SQLException {
    
            try {
                Class.forName(driverName);
                dbConn = DriverManager.getConnection(dbURL, userName, userPwd);
                return dbConn;
            } catch (ClassNotFoundException e) {
                throw new RuntimeException(e);
            }
        }
        public ResultSet Sql_sate(String sql) throws SQLException {//SQL传入语句方法,返回查询结果。
            dbConn= Sql_set();
            Statement statement = dbConn.createStatement();
            rs = statement.executeQuery(sql);//
            return rs;
        }
    
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 7月14日
  • 已采纳回答 7月6日
  • 创建了问题 6月13日

悬赏问题

  • ¥15 无法输出helloworld
  • ¥15 高通uboot 打印ubi init err 22
  • ¥20 PDF元数据中的XMP媒体管理属性
  • ¥15 R语言中lasso回归报错
  • ¥15 网站突然不能访问了,上午还好好的
  • ¥15 有没有dl可以帮弄”我去图书馆”秒选道具和积分
  • ¥15 semrush,SEO,内嵌网站,api
  • ¥15 Stata:为什么reghdfe后的因变量没有被发现识别啊
  • ¥15 振荡电路,ADS仿真
  • ¥15 关于#c语言#的问题,请各位专家解答!