【问题标题】:Correctly writed in Db, but "Illegal operation on empty result set." error by Sql正确写在 Db 中,但是“空结果集上的非法操作”。 Sql 错误
【发布时间】:2013-09-16 22:32:18
【问题描述】:

我正在一个 sql 数据库上创建一个INSERT。并且发生了一件奇怪的事情:当我运行 downer 代码时,数据库被正确写入,但编译器给我一个错误

java.sql.SQLException: Illegal operation on empty result set.

我还没有搜索过它,我发现它可能是由于 JDBC 驱动程序的错误(但我不这么认为)。所以我决定在这里发帖。

首先我给你数据库表:

表格主题

+------------------+----------------+------------+
| subjectCode      | SubjectName    | teacherCode|
+------------------+----------------+------------+
| 1                | Maths          | 10         |
| 2                | English        | 20         |
| 3                | Greek          | 30         |
+------------------+----------------+------------+

表类

+------------------+----------------+
| ClassCode        | ClassName      |
+------------------+----------------+
| 1                | Class1         |
| 2                | Class2         |
| 3                | Class3         |
+------------------+----------------+

table 课程(row 和 col 是时间表的行(小时)和列(天),它们明确地确定时间表中的课程;例如:小时 1 是一天中的第一个小时)

+------------------+----------------+------------+-----------+-------+-------+
| LessonCode       | SubjectCode    | teacherCode| ClassCode |  Day  |  Hour |
+------------------+----------------+------------+-----------+-------+-------+
| 1                | James          | 10         |     1     |   1   |   1   |
| 2                | John           | 20         |     2     |   1   |   2   |
| 3                | Frank          | 30         |     3     |   1   |   3   |
+------------------+----------------+------------+-----------+-------+-------+

代码:

private void writeLesson(String subjectName, String className, int column, int row)
{
    try{
        int subjCode;
        String query="SELECT subjectCode from subject WHERE subjectName='"+subjectName+"';";
        rs = st.executeQuery(query);
        rs.next();
        subjCode  = rs.getInt("subjectCode");


        int teacherCode;
        String query1="SELECT teacherCode from subject WHERE subjectName='"+subjectName+"';";
        rs = st.executeQuery(query1);
        rs.next();
        teacherCode = rs.getInt("teacherCode");

        int classCode;
        String query2="SELECT classCode from class WHERE className='"+className+"';";
        rs = st.executeQuery(query2);
        rs.next();
        ClassCode = rs.getInt("classCode");


        String query3 ="INSERT INTO lesson (subjCode, classCode, teacherCode, day, hour) "
                + "VALUES ('" + subjCode + "',"
                + "'" + classCode + "',"
                + "'" + teacherCode + "',"
                + "'" + column + "',"
                + "'" + row + "');";
        PreparedStatement statement=con.prepareStatement(query3);
        statement.executeUpdate();
        statement.close();   
    }

    catch (Exception ex){
        System.out.println("Error db: "+ex);

重要:方法writeLessoncycle 中。我没有在一个循环中测试过这段代码,它可以工作。为什么在您看来?

解决方案:问题是在方法 writeLesson 的循环中,我将“空白”字符串传递给它,导致错误(这就是在 DB 上写入有效的原因,但有错误)。

【问题讨论】:

    标签: java mysql sql-server


    【解决方案1】:

    您是否检查过您的选择语句中的结果集?其中一个不是空的吗? rs.getInt() 将抛出此异常,如果 rs 为空(在这种情况下 rs.next() 返回 false)

    【讨论】:

    • 您好,感谢您尝试帮助我。我向你解释:我已经分别尝试了代码的三个部分,它们都可以工作。但是,如果我在写的时候尝试,什么都没有,那就是错误。唯一不同的是,在native代码中,方法writeLesson是循环的,所以被多次调用
    • 你的评论启发了我(或者可能是 8 小时前我太累了......)。问题是我认为没有教训的“空白”单元格,我想把它写在数据库上。这也解释了为什么在 DB 上写入有效。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-08
    • 2016-04-30
    • 1970-01-01
    • 2017-09-17
    相关资源
    最近更新 更多