库存管理系统中登录验证中出现的问题

在库存管理系统的代码中出现了连接数据库进行查询时的错误,报空指针异常。

Dao包中的部分代码如下

protected static String dbClassName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
    protected static String dbUrl = "jdbc:sqlserver://localhost:1433; DatabaseName=db_JXC";
    protected static String dbUser = "sa";
    protected static String dbPwd = "han12345"; 
    protected static String second = null;
    public static Connection conn = null;
    static {
        try {
                Class.forName(dbClassName);
                } catch (Exception e) {
                e.printStackTrace();
                }
                try {
                // 与数据库连接
                Connection  conn = DriverManager.getConnection(dbUrl, dbUser, dbPwd);
                } catch (Exception e1) {
                e1.printStackTrace();
                }
    }

public static TbUserlist getUser(String name, String password) {
        //创建一个新的用户表对象
        TbUserlist user = new TbUserlist();
        //通过name查询用户信息,语句在
        ResultSet rs = findForResultSet("select * from tb_userlist where username='"+ name + "'");
        try {
            //这里出现空指针异常
            if (rs.next()) {
                //将表中读取到的信息传递到TbUserlist中用于后面的验证
                user.setUsername(name);
                user.setPass(rs.getString("pass"));
                if (user.getPass().equals(password)) {
                    user.setName(rs.getString("name"));
                    user.setQuan(rs.getString("quan"));
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return user;
    }


public static ResultSet findForResultSet(String sql) {
        if (conn == null)
            return null;
        long time = System.currentTimeMillis();
        ResultSet rs = null;
        try {
            Statement stmt = null;
            //该常量指示可滚动但通常不受result底层数据更改影响的result对象的类型,不可更新的resultset对象的类型  
            stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
            //执行sql语句,通过name查询用户信息
            rs = stmt.executeQuery(sql);
            //时间
            second = ((System.currentTimeMillis() - time) / 1000d) + "";
        } catch (Exception e) {
            e.printStackTrace();
        }
        return rs;
    }

Login类中的部分代码如下

public void actionPerformed(final ActionEvent e) {
                //从数据库中获取用户
                user = Dao.getUser(userName.getText(), userPassword.getText());
                //如果用户或者密码为空的话将两个文本框置为NULL
                if (user.getUsername() == null || user.getName() == null) {
                    userName.setText(null);
                    userPassword.setText(null);
                    return;
                }
                setVisible(false);
                new KCFrame();
            }
        });

调试的时候出现空指针异常,经过几次查找与修改之后代码修改如下

protected static String dbClassName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
    protected static String dbUrl = "jdbc:sqlserver://localhost:1433; DatabaseName=db_JXC";
    protected static String dbUser = "sa";
    protected static String dbPwd = "han12345"; 
    protected static String second = null;
    public static Connection conn = null;

    public static void MyConn()
    {
         try {
                Class.forName(dbClassName);
                } catch (Exception e) {
                e.printStackTrace();
                }
                try {
                // 与数据库连接
                 conn = DriverManager.getConnection(dbUrl, dbUser, dbPwd);
                System.out.println("连接成功");
                } catch (Exception e1) {
                e1.printStackTrace();
                }
    }

在这里将数据库的连接单独创建了一个方法
并且将
Connection conn = DriverManager.getConnection(dbUrl, dbUser, dbPwd);
改为
conn = DriverManager.getConnection(dbUrl, dbUser, dbPwd);
将Connection 去掉,这里带Connection 的话就是局部变量了,在后面连接依然为null

public void actionPerformed(final ActionEvent e) {
                Dao.MyConn();
                //从数据库中获取用户
                user = Dao.getUser(userName.getText(), userPassword.getText());
                //如果用户或者密码为空的话将两个文本框置为NULL
                if (user.getUsername() == null || user.getName() == null) {
                    userName.setText(null);
                    userPassword.setText(null);
                    return;
                }
                setVisible(false);
                new KCFrame();
            }
        });

在这个Login类中的这个监听器中获取用户信息之前调用了Dao类中的MyConn()方法创建数据库的连接。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值