mysql 我收到“Illegal operation on empty resultSet”错误,但是resultSet不应该为空?[已关闭]

7bsow1i6  于 2023-03-28  发布在  Mysql
关注(0)|答案(1)|浏览(205)

**已关闭。**此问题需要debugging details。当前不接受答案。

编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
5天前关闭。
Improve this question
我在使用Java方法更新SQL中的一条记录时遇到了问题,该方法名为“joinClassroom()”,基本上,它通过方法retrieveClassID从表“classes”中检索“classroom code”的ID,然后将该ID输入到表“students”的“classroom_id”列下。此代码的目的是类似于教师能够创建教室的kahoot函数,学生可以通过随机生成的代码加入其中。
然而,当方法运行时,我收到一条“Illegal operation on empty result set”消息,我不知道为什么resultSet是空的,因为我正在输入数据库中存在的课堂代码。这是我的代码的问题,不是吗?
方法:

public static int retrieveClassID(ActionEvent event, String classroom_code) throws SQLException {
    Connection connection = null;
    PreparedStatement preparedStatement = null;

    connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/x", "x", "x");
    preparedStatement = connection.prepareStatement("SELECT classroom_id FROM classrooms WHERE classroom_code = ?");
    preparedStatement.setString(1, classroom_code);
    ResultSet resultSet = preparedStatement.executeQuery();

    String retrievedID = resultSet.getString("classroom_id");
    int retrievedID2 = Integer.parseInt(retrievedID);

    if (resultSet != null) {
        resultSet.close();
    }

    if (preparedStatement != null) {
        preparedStatement.close();
    }

    if (connection != null) {
        connection.close();
    }

    return retrievedID2;

}

然后在我的更大的方法joinClassroom()中使用这个方法

public static void joinClassroom(ActionEvent event, String class_code, String email) throws SQLException {
    Connection connection = null;
    PreparedStatement preparedStatement = null;
    ResultSet resultSet = null;
    connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/x", "x", "x");
    preparedStatement = connection.prepareStatement("UPDATE students SET classroom_id = ? WHERE user_id = ?");
    preparedStatement.setString(1, String.valueOf(retrieveClassID(event, class_code)));
    preparedStatement.setString(2, String.valueOf(getUser_id()));
    resultSet = preparedStatement.executeQuery();

    if (resultSet != null) {
        resultSet.close();
    }

    if (preparedStatement != null) {
        preparedStatement.close();
    }

    if (connection != null) {
        connection.close();
    }
}

错误出现在线上

String retrievedID = resultSet.getString("classroom_id");

方法的retrieveClassID。
错误:
java.sql.SQLException:对空结果集进行非法操作。
下面是该方法在程序中实际使用的地方:

@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
    button_proceed.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {
            if (!textField_code.getText().trim().isEmpty()) {
                try {
                    System.out.println("event about to execute");
                    joinClassroom(event, textField_code.toString(), Utility.getUser_email());
                    System.out.println("event executed");
                } catch (SQLException e){
                    e.printStackTrace();
                }
            }
        }
    });
}

我试过重命名引用,也试过将方法retrieveClassID()joinClassroom()连接在一起,但都不起作用。

ulydmbyx

ulydmbyx1#

据我所知,executeQuery只用于SELECT查询。如果你想执行DML查询(插入,更新,删除),你必须使用executeUpdate

相关问题