SQLException:java.sql.SQLException:ResultSet关闭后不允许操作,而ResultSet从未关闭

SQLException:java.sql.SQLException:ResultSet关闭后不允许操作,而ResultSet从未关闭,java,jdbc,sqlexception,Java,Jdbc,Sqlexception,我所知道的是,我们不能在关闭后调用ResultSet。使用此选项后,关闭每个ResultSet、语句和连接是一个很好的做法 但在我的代码中,我从未关闭过连接,那为什么会有呢- java.sql.SQLException:结果集关闭后不允许操作 我的代码如下: 编辑- try{ Connection con=CommonUtil.getConnection(); Statement st=con.createStatement(); ResultS

我所知道的是,我们不能在关闭后调用
ResultSet
。使用此选项后,关闭每个
ResultSet
语句和
连接是一个很好的做法

但在我的代码中,我从未关闭过连接,那为什么会有呢-

java.sql.SQLException:结果集关闭后不允许操作

我的代码如下:

编辑-

try{
        Connection con=CommonUtil.getConnection();
        Statement st=con.createStatement();

        ResultSet rs=st.executeQuery("select * from logirecord");
        int flag=0;
        while(rs.next()){
            if(rs.getString(2).trim().equals(username)&&rs.getString(3).trim().equals(password)){
                flag=1;

                ResultSet rs1=st.executeQuery("select * from personrecord where LoginId='"+ rs.getString(1).trim()+"'");
                if(rs1.next()){
                String name=rs1.getString(1);
                String address=rs1.getString(2);
                String hobby=rs1.getString(4);
                }
                //Exception here.
                ResultSet rs2=st.executeQuery("select * from interest where LoginId='"+rs.getString(1).trim()+"'");
                //at com.org.test.LoginServlet.doPost(LoginServlet.java:49)
                if(rs2.next()){
                String interest=rs2.getString(2);
                String interest2=rs2.getString(3);
                String interest3=rs2.getString(4);
                }
                request.getRequestDispatcher("display.jsp").forward(request, response);
                return;
            }
        }   
    }catch(Exception e){
        e.printStackTrace();
    }
好吧,你得到了

java.sql.SQLException: Operation not allowed after ResultSet closed
因为您试图在遍历同一连接的另一个结果集时遍历一个结果集

如果将来自同一数据库的两个结果集的处理嵌套,则说明您做错了。这些集合的组合应该在数据库端完成。

好的,您得到了

java.sql.SQLException: Operation not allowed after ResultSet closed
因为您试图在遍历同一连接的另一个结果集时遍历一个结果集

如果将来自同一数据库的两个结果集的处理嵌套,则说明您做错了。这些集合的组合应该在数据库端完成。

好的,您得到了

java.sql.SQLException: Operation not allowed after ResultSet closed
因为您试图在遍历同一连接的另一个结果集时遍历一个结果集

如果将来自同一数据库的两个结果集的处理嵌套,则说明您做错了。这些集合的组合应该在数据库端完成。

好的,您得到了

java.sql.SQLException: Operation not allowed after ResultSet closed
因为您试图在遍历同一连接的另一个结果集时遍历一个结果集


如果将来自同一数据库的两个结果集的处理嵌套,则说明您做错了。这些集合的组合应该在数据库端完成。

您同时打开了多个与同一语句对象相关的结果集。(见此处-):

默认情况下,每个语句对象只能打开一个ResultSet对象 同时,。因此,如果读取一个ResultSet对象 与另一个的读取交错,每个都必须已生成 通过不同的语句对象。语句中的所有执行方法 如果 开放的存在


您没有关闭使情况更糟的rs。

您同时打开了与同一语句对象相关的多个结果集。(见此处-):

默认情况下,每个语句对象只能打开一个ResultSet对象 同时,。因此,如果读取一个ResultSet对象 与另一个的读取交错,每个都必须已生成 通过不同的语句对象。语句中的所有执行方法 如果 开放的存在


您没有关闭使情况更糟的rs。

您同时打开了与同一语句对象相关的多个结果集。(见此处-):

默认情况下,每个语句对象只能打开一个ResultSet对象 同时,。因此,如果读取一个ResultSet对象 与另一个的读取交错,每个都必须已生成 通过不同的语句对象。语句中的所有执行方法 如果 开放的存在


您没有关闭使情况更糟的rs。

您同时打开了与同一语句对象相关的多个结果集。(见此处-):

默认情况下,每个语句对象只能打开一个ResultSet对象 同时,。因此,如果读取一个ResultSet对象 与另一个的读取交错,每个都必须已生成 通过不同的语句对象。语句中的所有执行方法 如果 开放的存在



您没有关闭使情况更糟的rs。

可能您的查询没有返回anything@DarshanLila它提供了我测试过的数据,假设此结果仍然为空,为什么resltset关闭异常?这不应该是。异常到底在哪里引发???@AbishekManoharan控制台在resultsetclose异常的情况下从不显示行号。我们必须从可能出现这种情况的地方开始。不能从同一语句对象打开多个结果集。使用
st
执行新语句时,该语句中以前打开的任何结果集都将关闭。如果您的连接为auto commit true,则执行另一条语句可能会关闭来自其他语句的结果集(具体行为因JDBC驱动程序而异,因为某些JDBC驱动程序默认在提交时关闭,而另一些则可在提交时保持)。可能您的查询没有返回anything@DarshanLila它提供了我测试过的数据,假设此结果仍然为空,为什么resltset关闭异常?这不应该是。异常到底在哪里引发???@AbishekManoharan控制台在resultsetclose异常的情况下从不显示行号。我们必须从可能出现这种情况的地方开始。不能从同一语句对象打开多个结果集。使用
st
执行新语句时,该语句中以前打开的任何结果集都将关闭。如果您的连接为auto commit true,则执行另一条语句可能会关闭来自其他语句的结果集(具体行为因JDBC驱动程序而异,因为某些JDBC驱动程序默认在提交时关闭,而另一些则可在提交时保持)。可能您的查询没有返回anything@DarshanLila它提供了我测试过的数据,假设此结果仍然为空,为什么resltset关闭异常?不应该是。异常到底在哪里引发???@Abishemanoharan console在ResultSetClose异常的情况下从不显示行号。我们必须从可能出现此情况的位置获取。您不能有多个结果