单击按钮时,此代码显示此错误消息:
结果集关闭后不允许操作
代码:
case 4:
BufferedReader choosest=new BufferedReader(new InputStreamReader(System.in));
System.out.print("enter your id");
int idst=Integer.parseInt(choosest.readLine());
String SQL = "SELECT * FROM student";
ResultSet ps = stmt.executeQuery(SQL);
while (ps.next()) {
int iddb = ps.getInt("id");
if(idst==iddb) {
BufferedReader lessonuser = new BufferedReader(new InputStreamReader(System.in));
System.out.print("choose lesson ");
String lest =lessonuser .readLine();
String SQL1 = "SELECT * FROM lesson";
ResultSet qs = stmt.executeQuery(SQL1);
while (qs.next()) {
String ledb = ps.getString("namel");
if (lest == ledb) {
String insertTableSQL1 ="INSERT INTO chooselesson (id, lesson) VALUES ("+idst+",'"+lest+"')";
stmt.executeUpdate(insertTableSQL1);
System.out.print("your unit sucssesfully add ");
}
}
}
}
问题出在ResultSet qs=stmt行。executeQuery(SQL1)。使用语句执行另一个查询将关闭上一个结果集。修改上面的代码可能会起作用,我没有测试解决方案,但它通常会起作用。
BufferedReader choosest=new BufferedReader(new InputStreamReader(System.in));
System.out.print("enter your id");
int idst=Integer.parseInt(choosest.readLine());
String SQL = "SELECT * FROM student";
ResultSet ps = stmt.executeQuery(SQL);
while (ps.next()) {
int iddb = ps.getInt("id");
if(idst==iddb) {
BufferedReader lessonuser = new BufferedReader(new InputStreamReader(System.in));
System.out.print("choose lesson ");
String lest =lessonuser .readLine();
String SQL1 = "SELECT * FROM lesson";
ResultSet qs = stmtSelect.executeQuery(SQL1);
while (qs.next()) {
String ledb = ps.getString("namel");
if (lest == ledb) {
String insertTableSQL1 ="INSERT INTO chooselesson (id, lesson) VALUES ("+idst+",'"+lest+"')";
stmtInsert.executeUpdate(insertTableSQL1);
System.out.print("your unit sucssesfully add ");
}
}
}
}
PreparedStatement是更好的性能选择,https://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html
当您进行另一个查询时,ResultSet
将关闭。对于此代码,您可以首先收集ps
的所有数据。然后迭代结果以执行其他查询。
我不得不说,在循环中进行查询是一种性能很差的操作。有很多方法可以避免这种情况。例如,您可以在一个查询中获取所有学生记录以及所有课程记录。然后使用lessonuser
找出应该插入到chooselesson
表中的记录,并以批处理模式运行insert
SQL。
我试图为通过html形式的文本框检索的查询编写一个JUnit测试。文本检索已经过测试并有效,但我的单元测试失败了。我使用了两个相关的类:QueryController和QueryControlllerTest。我一直在玩弄我在这两个类中关闭的时间和内容,并不断得到错误:结果集关闭后不允许操作。 QueryController测试。Java语言 QueryController。Java语言
我已经为此工作了将近一天半,我似乎无法解决这个错误。我不知道为什么结果集被关闭。也许你们中的一些人可以帮我。 MySQL数据库: MySQLHandler MySQLDonation 异常发生在这里:在MySQLDonation和实际堆栈跟踪的同时循环中: 有了这些信息,让我说这确实有效,我得到了我的信息和游戏中没有的东西,但它会重复,就像用户永远不会从查询中删除,所以它会给他们无限的奖励。如果您
下面是相关的代码部分:Server. Proxy.update_allLogOut:(第65行是时括号) 服务器服务器: 主要: 我必须指出,它99%的运行时间都没有例外。。但有几次我遇到了这个例外,我不明白为什么会发生这种情况。有什么想法吗?很明显,有些地方做错了,但这里所有类似的主题都没有给出这个问题的答案。。。
我正在使用Prepared语句进行我的SELECT查询。之后,我试图从结果集获取信息,并将其放入数组列表中。我正在将其放入结果集循环,但我得到了一个错误。sql。SQLException:结果集关闭后不允许操作。我试图用rs.close()关闭它,但它给了我同样的错误。这是我的方法。请帮忙!
我正在将MySQL与Java结合使用,试图制作shoppingcartDB,并试图删除从订购到现在已经过了30天的元组。 但是编译器说: 我如何解决这个问题? 代码: 抛出异常的代码行是: stmt。executeUpdate(“从篮子中删除,其中orderdate=““Odate”;”);
我是java和SQL新手,我在重复一个我不知道如何避免的问题: 假设我想创建两个执行查询,一个在getRequest estsFromDB方法中的另一个内部,我创建第一个执行查询,在第二个方法中,我创建第二个执行查询: 第二个功能: 在第二个循环中,我得到了一个SQLException:“ResultSet关闭后不允许操作”,我尝试了:最后用result关闭结果。close()但我也得到异常nul