0

私はINSERTSQLデータベースで作成しています。そして、奇妙なことが起こります: ダウナー コードを実行すると、DB は正しく書き込まれますが、コンパイラは次のエラーを表示します。

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         |
+------------------+----------------+

テーブル レッスン (行と列はタイムテーブルの行 (時間) と列 (日) であり、タイムテーブルのレッスンを一義的に決定します。たとえば、時間 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への書き込みは機能しましたが、エラーが発生しました)。

4

1 に答える 1