LoginAction.login(LoginAction.java:40) 
UsersDAO.login(UsersDAO.java:22)
LoginAction 40行代码调用了UsersDAO 22行代码,这里面有空指针
楼主检查下,看哪个值没有取到,然后又给它做后续操作了

解决方案 »

  1.   

    package com.java.action;
    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;
    }
    }如何解决
      

  2.   

    如果是22行错的话,就是这句错了
    pt = con.prepareStatement("select * from member where memberID=? and password=?");
    你可以打印con看是否获取到连接,可能是因为con为null的原因。
      

  3.   

    package com.java.Database;import java.sql.Connection;
    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();}
    }
    }
    我真的是不会啊,可不可以给个具体一点的方法。
      

  4.   

    java.lang.NoSuchMethodError: main
    Exception in thread "main" 打印出来是个这。
      

  5.   

    把这句话后面改成这样试下
    Class.forName(DRIVER);
    Class.forName(DRIVER).newInstance();