首页 > 解决方案 > 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 ");

                        }
                        }

                    }
                    }

标签: javamysqljdbc

解决方案


问题出在 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


推荐阅读