java - JDBC:ResultSet 关闭后不允许操作
问题描述
单击按钮时,此代码显示此错误消息:
结果集关闭后不允许操作
代码:
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); .Using 语句执行其他查询将关闭之前的 ResultSet。修改上面的代码可能会起作用,我没有测试解决方案,但它通常应该可以工作。
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
推荐阅读
- python - 使用 makefile 安装 pipenv 和项目依赖项
- reactjs - @ckeditor:错误:找不到模块:错误:无法解析'./@ckeditor/ckeditor5-ui/theme/mixins/_rwd.css'
- tcl - FPGA - 使用 TCL 增加一个常数
- python - 如何就地剥离熊猫数据框中的部分字符串以将结果理解为带有时区的时间戳?
- xamarin - OnAppearing() 方法在调用 OnCurrentPageChanged() 方法之前执行
- angular-bootstrap - ngb-pagination:collectionSize 检索时页面设置为 1
- angular - 人工审核 - 一些漏洞需要您注意才能解决
- javascript - 每次我调用这个函数时,旧的标记都会留下来,新的标记会出现,有什么办法可以解决这个问题吗?
- inno-setup - 如何在 inno setup 中找到已安装的目录?
- python-3.x - 使用 python Boto3 对 DynamoDB 进行扫描或查询操作