Java 在Db中正确写入,但;对空结果集的非法操作。”;Sql错误
我正在sql数据库上进行Java 在Db中正确写入,但;对空结果集的非法操作。”;Sql错误,java,mysql,sql-server,Java,Mysql,Sql Server,我正在sql数据库上进行插入。发生了一件奇怪的事情:当我运行downer代码时,DB被正确写入,但编译器给我一个错误 java.sql.SQLException:对空结果集的非法操作。 我已经搜索过了,我发现这可能是由于JDBC驱动程序的一个错误(但我不这么认为)。所以我决定在这里发帖 首先,我为您提供数据库表: 表格主题 +------------------+----------------+------------+ | subjectCode | SubjectName
插入。发生了一件奇怪的事情:当我运行downer代码时,DB被正确写入,但编译器给我一个错误
java.sql.SQLException:对空结果集的非法操作。
我已经搜索过了,我发现这可能是由于JDBC驱动程序的一个错误(但我不这么认为)。所以我决定在这里发帖
首先,我为您提供数据库表:
表格主题
+------------------+----------------+------------+
| subjectCode | SubjectName | teacherCode|
+------------------+----------------+------------+
| 1 | Maths | 10 |
| 2 | English | 20 |
| 3 | Greek | 30 |
+------------------+----------------+------------+
表类
+------------------+----------------+
| ClassCode | ClassName |
+------------------+----------------+
| 1 | Class1 |
| 2 | Class2 |
| 3 | Class3 |
+------------------+----------------+
表Lessure(行和列是时间表的行(小时)和列(天),它们单独确定时间表中的课程;例如:小时1是一天中的第一个小时)
代码:
重要:方法writelson
处于循环中。我没有在一个周期内测试过这段代码,它可以正常工作。你认为为什么
解决方案:问题是在方法
writeLesson
的循环中,我向它传递了“空白”字符串,导致了错误(这就是为什么在DB上写入操作有效,但存在错误)。您是否检查了select语句中的结果集?其中一个不是空的吗?如果rs为空,rs.getInt()将抛出此异常(在本例中,rs.next()返回false)您好,谢谢您的帮助。我解释一下:我已经分别尝试了代码的三个部分,它们都能工作。但是如果我试着写,什么都没有,那就是错误。唯一的区别是,在本机代码中,writelson
方法处于循环中,因此多次调用它您的评论启发了我(或者8小时前我太累了…)。问题是,我认为“空白”单元格没有课,我想把它写在DB上。这也解释了在DB上编写代码的原因。非常感谢。
+------------------+----------------+------------+-----------+-------+-------+
| 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);