我有一个数据库,它有一个表//Second Class
class B {
var text: Text? {
didSet{
headerlabel.text = text.savedUserHeader
saveUserLabel.text = text?.savedUserText
}
}
}
,它包含许多属性,如姓名,电子邮件等。它还具有VARCHAR数据类型中的user
和username
。我写了两个课程password
和LoginModel
。 controller有方法Controller
,它通过它检查来自loginit
的{{1}}方法是否返回true。我无法找出login
总是返回false的原因。请帮忙。
以下是我的方法:
来自LoginModel类的
LoginModel
来自类控制器的
LoginModel
这是一个JavaFX应用程序。 public boolean login(String userid, String userpass) throws SQLException {
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
String query = "SELECT * FROM user WHERE username = ? AND password = ?";
try{
preparedStatement = connection.prepareStatement(query);
preparedStatement.setString(1,userid);
preparedStatement.setString(2,userpass);
resultSet = preparedStatement.executeQuery();
if(resultSet.next()){
return true;
}
else {
// System.out.println(resultSet.next());
return false;
}
}
catch (Exception e){
return false;
}
finally {
preparedStatement.close();
resultSet.close();
return false;
}
}
和public void loginit() throws SQLException {
String userid = uid.getText();
String userpass = upass.getText();
try {
if (loginmodel.login(userid, userpass)) {
lblstatus.setText("YES");
}
else
lblstatus.setText("Invalid");
} catch (SQLException e) {
lblstatus.setText("No");
e.printStackTrace();
}
}
分别是text-field和password-field的id。 userid
是始终显示userpass
的标签,无法找出原因!
这是我的数据库的快照
答案 0 :(得分:1)
从return false
块中删除finally
。它将在执行时执行,如果您没有例外。
finally {
preparedStatement.close();
resultSet.close();
return false;
}
将您的代码更改为:
public boolean login(String userid, String userpass) throws SQLException {
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
String query = "SELECT * FROM user WHERE username = ? AND password = ?";
try{
preparedStatement = connection.prepareStatement(query);
preparedStatement.setString(1,userid);
preparedStatement.setString(2,userpass);
resultSet = preparedStatement.executeQuery();
if(resultSet.next()){
return true;
}
else {
// System.out.println(resultSet.next());
return false;
}
}
catch (Exception e){
return false;
}
finally {
preparedStatement.close();
resultSet.close();
}
return false;
}