You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaFX+MySQL学生登录方法失效,始终提示凭据错误

问题分析与修复

你的代码核心逻辑完全搞反了:resultSet.isBeforeFirst()返回true的时候,说明SQL查询到了匹配的记录(结果集不为空),但你现在的代码一查到记录就弹"Wrong credentials"错误,这就是为什么每次都弹出这个提示的原因。

另外还有几个额外问题:

  • 邮箱作为登录标识应该是唯一的,不需要用do-while循环遍历结果集,查一次就够了
  • 没有正确关闭数据库连接、Statement和ResultSet,容易导致资源泄漏
  • 密码匹配失败时没有给出对应提示

修复后的代码如下:

public static void studentSignIn(ActionEvent event, String email, String password) {
    // 使用try-with-resources自动关闭资源
    try (Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/compsciia", "root", "toor");
         PreparedStatement preparedStatement = connection.prepareStatement("SELECT password FROM students WHERE email = ?")) {

        preparedStatement.setString(1, email);
        try (ResultSet resultSet = preparedStatement.executeQuery()) {
            // 检查是否有匹配的记录
            if (!resultSet.isBeforeFirst()) {
                // 没有找到对应邮箱的用户
                Alert alert = new Alert(Alert.AlertType.ERROR);
                alert.setContentText("该邮箱未注册");
                alert.show();
                return;
            }

            // 因为邮箱唯一,直接取第一条记录
            resultSet.next();
            String retrievedPassword = resultSet.getString("password");

            if (retrievedPassword.equals(password)) {
                sceneChange(event, "StudentPage.fxml", email);
            } else {
                // 密码不匹配
                Alert alert = new Alert(Alert.AlertType.ERROR);
                alert.setContentText("密码错误");
                alert.show();
            }
        }
    } catch (SQLException e) {
        // 处理数据库异常
        Alert alert = new Alert(Alert.AlertType.ERROR);
        alert.setContentText("数据库连接失败:" + e.getMessage());
        alert.show();
        e.printStackTrace();
    }
}

关键修复点:

  1. 反转isBeforeFirst()的判断逻辑:当结果集为空(!resultSet.isBeforeFirst())时,才提示邮箱未注册
  2. 使用try-with-resources语法,自动关闭Connection、PreparedStatement和ResultSet,避免资源泄漏
  3. 去掉多余的循环,因为邮箱唯一,只需读取一条记录
  4. 区分“邮箱不存在”和“密码错误”两种错误提示,更友好
  5. 添加异常捕获,处理数据库连接等异常情况

内容的提问来源于stack exchange,提问作者oi_amigo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 09:15:47