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;
}
}
# 1 楼答案
您将返回一个布尔变量,该变量指示登录过程是否成功。但要获取用户详细信息,您应该从登录过程中返回一个用户
# 2 楼答案
想想为什么你期望
u.getUsername()
是非空的。首先,您要创建一个用户实例:然后将一些值分配给一些局部
username
和password
变量:然后调用一个只接受
username
和password
的登录方法:最后,您要打印出以下消息:
此时,
u
只是一个新实例化的对象——您还没有给它分配任何值,也没有对它做任何工作,getUsername
和getPassword
方法没有理由返回null
之外的任何东西。也许您希望login
方法返回User
实例,而不是返回bool
# 3 楼答案
不要从主类中分配用户名和密码。通过调用
u.setUserName()
和u.getUserName()
来设置它们。 您试图访问一个新的User
对象,因此它返回null