我在执行查询时遇到了一个问题。我使用相同的结果集和语句来执行所有查询。现在我面临一个间歇性的 SQlException 说连接已经关闭。现在我们必须为每个查询有单独的结果集或者像锁一样结构。谁能告诉哪个更好。我认为引入锁会减慢这个过程。我说得对吗?
更新:为了更清楚。错误可能发生,因为 finally 块在所有查询执行之前被调用并且连接被关闭并且将引发异常。
这是我得到的例外
java.sql.SQLException:连接已经关闭。在 weblogic.jdbc.wrapper.PoolConnection.checkConnection(PoolConnection.java:81) 在 weblogic.jdbc.wrapper.ResultSet.preInvocationHandler(ResultSet.java:68) 在 weblogic.jdbc.wrapper.ResultSet_com_informix_jdbc_IfxResultSet.next(Unknown Source) 在 com .test.test.execute(test.java:76)
在 org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:413) 在 org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:225) 在 org.apache.struts.action.ActionServlet.process (ActionServlet.java:1858) 在 org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:459) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:760) 在 javax.servlet.http。 HttpServlet.service(HttpServlet.java:853) 在 weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1077) 在 weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:465) 在 weblogic.servlet .internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:348) 在 weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction。在 weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121) 在 weblogic.servlet.internal 的 weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) 运行(WebAppServletContext.java:7047) .WebAppServletContext.invokeServlet(WebAppServletContext.java:3902) 在 weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2773) 在 weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224) 在 weblogic.kernel.ExecuteThread。运行(ExecuteThread.java:183)3902) 在 weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2773) 在 weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224) 在 weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183)3902) 在 weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2773) 在 weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224) 在 weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183)
示例代码:
ResultSet rst=null;
Statement stmt=null;
Connection con=DBConnection.getConnection();
stmt=con.createStatement();
rst=stmt.executeQuery("select * from dual");
while(rst.next())
{ : ://Some code }
rst=stmt.executeQuery("select * from doctor where degree="BM");
while(rst.next())
{ //blah blah }
finally
{
//close con,rst and stmt
}