私はINSERT
SQLデータベースで作成しています。そして、奇妙なことが起こります: ダウナー コードを実行すると、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);
重要: メソッドwriteLesson
はcycle
. このコードをサイクルではなくテストしましたが、動作します。なぜあなたの意見では?
解決策:問題は、メソッドwriteLesson
に渡したサイクルで「空白」の文字列が発生し、エラーが発生したことです(そのため、DBへの書き込みは機能しましたが、エラーが発生しました)。