您的位置:首页 > 编程语言 > Java开发

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

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

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()方法创建数据库的连接。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐