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

来源:互联网 发布:淘宝2015年销售额多少 编辑:程序博客网 时间:2024/05/09 02:14

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

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 0
原创粉丝点击