有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

mysql对象引用返回空Java

我正在运行一个简单的Java登录系统,使用MySQL

登录工作正常,但我想创建一个通过get方法登录的用户对象。但当输出这些方法时,它们返回null:

“以null和null登录”

我做错了什么

--梅因--

public class Main {


public static void main(String[] args) {

    Scanner input = new Scanner(System.in);
    User u = new User();

    String username;
    String password;

    System.out.println("Enter Username: ");
    username = input.next();

    System.out.println("Enter Password: ");
    password = input.next();

    DatabaseController dc = new DatabaseController();
    dc.login(username, password);

    if(dc.a){
        System.out.print("Logged in with "+ u.getUsername()+ " and " +u.getPassword());
    }
    else{
        System.out.println("mismatch");
    }

}

}

--数据库控制器---

public class DatabaseController {

private DatabaseConnection db;
ResultSet rs;
boolean a;
User u = null;

String name;
String pass;

public DatabaseController()
{
    db = new DatabaseConnection();
}

public boolean login(String username, String password)
{

    try
    {
        rs = db.doQuery("SELECT Firstname, Password FROM Users WHERE Firstname ='"+ username+"';");
        while(rs.next())
        {
            name = rs.getString(1);
            pass = rs.getString(2);
            if(pass.equals(password)){
                a = true;
                u = new User();
                u.setPassword(password);
                u.setUsername(username);
            }
        }
    }
    catch(Exception ex)
    {
        ex.printStackTrace();
    }
    return a;
}
 }

---用户---

public class User {

private String username;
private String password;

public String getUsername() {
    return username;
}
public void setUsername(String username) {
    this.username = username;
}
public String getPassword() {
    return password;
}
public void setPassword(String password) {
    this.password = password;
}

}

共 (3) 个答案

  1. # 1 楼答案

    您将返回一个布尔变量,该变量指示登录过程是否成功。但要获取用户详细信息,您应该从登录过程中返回一个用户

    // login method return the user when successful login happens otherwise null
    public User login(String username, String password){
    
    return u;
    }
    
    // get the user return by login process, if u is null then login fail otherwise login pass and show details
    u = dc.login(username, password);
    
  2. # 2 楼答案

    想想为什么你期望u.getUsername()是非空的。首先,您要创建一个用户实例:

    User u = new User();
    

    然后将一些值分配给一些局部usernamepassword变量:

    String username;
    String password;
    
    System.out.println("Enter Username: ");
    username = input.next();
    
    System.out.println("Enter Password: ");
    password = input.next();
    

    然后调用一个只接受usernamepassword的登录方法:

    DatabaseController dc = new DatabaseController();
    dc.login(username, password);
    

    最后,您要打印出以下消息:

    System.out.print("Logged in with "+ u.getUsername()+ " and " +u.getPassword());
    

    此时,u只是一个新实例化的对象——您还没有给它分配任何值,也没有对它做任何工作,getUsernamegetPassword方法没有理由返回null之外的任何东西。也许您希望login方法返回User实例,而不是返回bool

  3. # 3 楼答案

    不要从主类中分配用户名和密码。通过调用u.setUserName()u.getUserName()来设置它们。 您试图访问一个新的User对象,因此它返回null