Изправен съм пред проблем, докато изпълнявам заявки. Използвам един и същи resultSet и оператор за изпълнение на всички заявки. Сега се сблъсквам с периодично SQlException, което казва, че връзката вече е затворена. Сега трябва или да имаме отделен resultSet за всяка заявка, или да имаме заключване като структура. Може ли някой да каже кое е по-добро. Мисля, че въвеждането на ключалки ще забави процеса. Прав ли съм?
Актуализация: За да бъдем по-ясни. Грешката може да възникне, защото блокът 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(Un известен източник) на 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.run(WebAppServletContext.java :7047) в weblogic .security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) в weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121) в weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java: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
}