java - 即使 SQLite 数据库中存在数据也无法登录

标签 java database sqlite javafx authentication

我有一个数据库,它有一个表 user它由许多属性组成,如姓名、电子邮件等。它还具有 usernamepassword在 VARCHAR 数据类型中。我写了两个类LoginModelController 。 Controller 有方法 loginit通过它检查是否 login方法来自LoginModel返回 true 或 false。我无法找出原因LoginModel总是返回 false。请帮忙。

这是我的方法:

来自 LoginModel 类

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;
    }
}

来自 Controller 类

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();
    }

}

这是一个 JavaFX 应用程序。 useriduserpass分别是文本字段和密码字段的 ID。 lblstatus是始终显示 Invalid 的标签,不明白为什么!

这是我的数据库的快照

enter image description here

最佳答案

finally block 中删除 return false。如果没有异常,它将在执行的情况下执行。

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;

}

关于java - 即使 SQLite 数据库中存在数据也无法登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43026199/

相关文章:

java - JTable 错误 : java. lang.ArrayIndexOutOfBoundsException: 1 >= 0

java - 自定义组件命名空间调用

java - InvalidRequestException(为什么 :Expected 8 or 0 byte long for date ) cassandra

c# - 数据库未与指定的连接字符串连接

c# - SQLite 即使在连接关闭后仍保持数据库锁定

java - 包含测试失败 Java 的列表

sql - 定义没有数据的表的大小 (Oracle)

sql - 根据业务逻辑获取第一个join结果

php - 哪个数据库架构师最适合网站/页面统计计数

php - SQLite 和 MySQL 的重复列增量