准备好的语句Java分配不起作用
我有一个功能,允许用户在用户类中登录系统。登录后——从数据库中检索他们的名字和姓氏,并将其作为私有变量存储在用户类中
private String username = "";
private String forename = "";
private String surname = "";
public User(){}
public boolean loginButtonAction(String user, String pass) {
try {
String statement = "SELECT PUNAME, PPASS, PFNAME, PSNAME FROM APP.PERSON WHERE PUNAME = ? AND PPASS = ?";
PreparedStatement ps = Main.getPreparedStatement(statement);
ps.setString(1, user);
ps.setString(2, pass);
ResultSet rs = ps.executeQuery();
if (rs.next()) {
System.out.println("Logged in");
username = user;
forename = rs.getString("PFNAME");
surname = rs.getString("PSNAME");
return true;
}
rs.close();
ps.close();
} catch (SQLException e) {
System.out.println(e.getMessage());
}
System.out.println("Incorrect login details");
return false;
}
我的用户类中有公共方法来返回这些变量
public String getUsername() {
return username;
}
public String getForename() {
return forename;
}
public String getSurname() {
return surname;
}
我正在我的主类和方法中创建一个新的User实例,用于测试目的,并在成功登录后简单地打印用户的名字和姓氏,当然:
User u = new User();
u.loginButtonAction("johnny", "arsenal");
System.out.println("Forename: " + u.getForename());
用户名工作正常,但当然不能从数据库中提取。结果如下:
run:
Logged in
Forename:
以下是我在应用程序中的数据库值。人员:
我做错了什么
# 1 楼答案
在调试方面,您应该做的第一件事是替换:
与:
这将告诉您在
forname
中放置的位置是什么如果为空,则问题在于数据库中的数据
而且,根据您最近的更新,
johnny/arsenal
的PFNAME
和PSNAME
列确实是空的看来你的代码运行得很好,只是你的数据库没有像你预期的那样被填充
select
是区分大小写的,所以johnny/arsenal
和Johnny/arsenal
之间有区别。也许您认为您需要大写变体,在这种情况下,您应该使用: