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异常的情况下从不显示行号。我们必须从可能出现此情况的位置获取。您不能有多个结果