Java set()方法接收值,但get()方法返回null
我正在创建一个登录页面,它从数据库中检索用户详细信息并存储在用户类中。Set方法正确地接收值,但是当我尝试使用Get方法访问细节时,它返回null。请参阅下面的代码片段,您能否让我知道我在这里遗漏了什么 从数据库检索详细信息并设置值: 类userdao:Java set()方法接收值,但get()方法返回null,java,null,setter,getter,Java,Null,Setter,Getter,我正在创建一个登录页面,它从数据库中检索用户详细信息并存储在用户类中。Set方法正确地接收值,但是当我尝试使用Get方法访问细节时,它返回null。请参阅下面的代码片段,您能否让我知道我在这里遗漏了什么 从数据库检索详细信息并设置值: 类userdao: user.setID(rs.getString("ID")); user.setHashPassword(rs.getString("HashPassword")); user.setAccessLevel(rs.getInt("AccessL
user.setID(rs.getString("ID"));
user.setHashPassword(rs.getString("HashPassword"));
user.setAccessLevel(rs.getInt("AccessLevel"));
user.setLastDate(rs.getDate("LastAccessDate"));
注意:此点后连接关闭
设置值:
类用户:
public class User
{
private String ID;
private String HashPassword;
private int AccessLEVEL;
private Date LastAccessDate;
public User()
{
}
public void setID(String uID)
{
this.ID = uID;
}
public String getID()
{
return this.ID;
}
public void setHashPassword(String uHash)
{
this.HashPassword = uHash;
}
public String getHashPassword()
{
return this.HashPassword;
}
public void setAccessLevel(int uALevel)
{
this.AccessLEVEL = uALevel;
}
public int getAccessLevel()
{
return this.AccessLEVEL;
}
public void setLastDate(Date uLDate)
{
this.LastAccessDate = uLDate;
}
public Date getLastDate()
{
return this.LastAccessDate;
}
}
我正在从另一个接收null的类访问get()值
类登录:
System.out.println(user.getID()); // returning null
System.out.println(user.getHashPassword()); // returning null
System.out.println(user.getAccessLevel()); // returning null
System.out.println(user.getLastDate()); // returning null
但是,当我在userdao类中创建变量(DB在其中返回详细信息)并从login类调用它们时,值会正确返回
你能帮我找出这段代码中的错误吗
下面是login和userdao类的完整代码
public class Login extends javax.swing.JFrame
{
User user = new User();
static String strUserID;
static String strPwd;
public Login()
{
super();
initComponents();
//JFrame jfrm = new JFrame("Login");
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
PasswordEncrypt cpe = new PasswordEncrypt();
User user = new User();
UserDAO uDAO = new UserDAO();
strUserID = jTextField1.getText();
char[] pwd = jPasswordField1.getPassword();
strPwd = new String(pwd);
if (strUserID.isEmpty())
{
JOptionPane.showMessageDialog(null, "Please Enter The User ID");
jTextField1.requestFocusInWindow();
}
else if (pwd.length == 0)
{
JOptionPane.showMessageDialog(null, "Please Enter The Password");
jPasswordField1.requestFocusInWindow();
}
else
{
try
{
// Authenticate the User
String strStoredPwd;
boolean UserExists;
uDAO.Authenticate(strUserID);
strStoredPwd = uDAO.dhash;
// The following lines are used only when the User class is returning a value
System.out.println(user.getID());
System.out.println(user.getHashPassword());
System.out.println(user.getAccessLevel());
System.out.println(user.getLastDate());
UserExists = cpe.validatePassword(strPwd, strStoredPwd);
}
}
}
}
几乎可以肯定,您使用的是两个不同的对象。以下是您可以测试的方法: 在
userdao
中,添加:
System.out.format("userdao: %d%n", System.identityHashCode(user));
并在登录
中添加相同的
System.out.format("login: %d%n", System.identityHashCode(user));
由于您尚未粘贴相关代码,因此很难找出确切的问题所在,但这应该会让您走上正确的道路。将类
UserDAO
的Authenticate()
方法的返回类型更新为
公共用户身份验证(字符串UserID)
//设置值后返回用户对象
当您从classLogin
调用上述方法时,现在它将返回User
类的对象,您已经在其中设置了值,现在代码将更新如下:
user = uDAO.Authenticate(strUserID);
您在设置和获取值时使用了相同的user对象??您如何知道这些值正在被设置?我在userdao和login类中都有这样的语句:user user=new user();您正在使用Hibernate和spring事务吗?我认为会话在dao中是关闭的,当您在视图中访问时,您会得到空值。请查看hibernateSessioninViewFilter示例,通过这些示例,您可以在视图中访问hibernate会话,即使您使用的是两个不同的objects@user3315146补充答案,我想它会对你有用
user = uDAO.Authenticate(strUserID);