LoginAction.login(LoginAction.java:40)
UsersDAO.login(UsersDAO.java:22)
LoginAction 40行代码调用了UsersDAO 22行代码,这里面有空指针
楼主检查下,看哪个值没有取到,然后又给它做后续操作了
UsersDAO.login(UsersDAO.java:22)
LoginAction 40行代码调用了UsersDAO 22行代码,这里面有空指针
楼主检查下,看哪个值没有取到,然后又给它做后续操作了
import com.java.role.Users;
import com.java.users.DAO.UsersDAO;import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {
private String memberID; //用户名
private String password; //密码
private String tip; //服务器提示的tip属性
public String getMemberID() {
return memberID;
}
public void setMemberID(String memberID) {
this.memberID = memberID;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getTip() {
return tip;
}
public void setTip(String tip) {
this.tip = tip;
}
public String login()throws Exception{
Users users=new Users();
users.setMemberID(memberID);
users.setPassword(password);
UsersDAO dao=new UsersDAO();
boolean flag=dao.login(users);
//如果为true,登录通过
if(flag){
//将用户名存入session
ActionContext.getContext().getSession().put("memberID", memberID);
return SUCCESS;
}else {
this.setTip(this.getText("login.failed"));//登录失败,返回首页
return INPUT;
}
}
}package com.java.users.DAO;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.java.role.Users;import com.java.Database.DatabaseDAO;public class UsersDAO {
private Connection con;
private PreparedStatement pt;
private ResultSet rs; public boolean login(Users users) {
boolean flag = false;
con = DatabaseDAO.getConnection();
try {
pt = con.prepareStatement("select * from member where memberID=? and password=?");
// 设置参数
pt.setString(1, users.getMemberID());
pt.setString(2, users.getPassword());
// 获取结果集
rs = pt.executeQuery();
// 如果能往下继续执行,表示用户名和密码正确
if (rs.next()) {
flag = true;
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 关闭数据库连接
DatabaseDAO.closeRs(rs);
DatabaseDAO.closePt(pt);
DatabaseDAO.closeCon(con);
}
return flag;
}
}如何解决
pt = con.prepareStatement("select * from member where memberID=? and password=?");
你可以打印con看是否获取到连接,可能是因为con为null的原因。
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class DatabaseDAO {
private static Connection con;
private static final String DRIVER = "com.mysql.jdbc.Driver";
private static final String URL ="jdbc:mysql://localhost:3306/db";
private static final String NAME="root";
private static final String PASSWORD="123456";
// 类似单例模式 加载一次即可获取驱动
static{
try {
Class.forName(DRIVER);
} catch (ClassNotFoundException e) {e.printStackTrace();}
}
//获取数据库连接
public static Connection getConnection(){
try {
con=DriverManager.getConnection(URL, NAME, PASSWORD);
} catch (SQLException e) {e.printStackTrace();}
return con;
}
//关闭Connection
public static void closeCon(Connection con){
try {
if(con!=null)
con.close();
} catch (SQLException e) { e.printStackTrace();}
}
//关闭PreparedStatemen
public static void closePt(PreparedStatement pt){
try {
if(pt!=null)
pt.close();
} catch (SQLException e) { e.printStackTrace();}
}
//关闭ResultSet
public static void closeRs(ResultSet rs){
try {
if(rs!=null)
rs.close();
} catch (SQLException e) { e.printStackTrace();}
}
}
我真的是不会啊,可不可以给个具体一点的方法。
Exception in thread "main" 打印出来是个这。
Class.forName(DRIVER);
Class.forName(DRIVER).newInstance();