即使SQLite数据库中存在数据,登录也不起作用

时间:2017-03-26 07:26:18

标签: java database sqlite javafx login

我有一个数据库,它有一个表//Second Class class B { var text: Text? { didSet{ headerlabel.text = text.savedUserHeader saveUserLabel.text = text?.savedUserText } } } ,它包含许多属性,如姓名,电子邮件等。它还具有VARCHAR数据类型中的userusername。我写了两个课程passwordLoginModel。 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的标签,无法找出原因!

这是我的数据库的快照

enter image description here

1 个答案:

答案 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;

}