第一次调用prepareStatement正常,但是第二次获取java.sql.SQLException:连接已关闭

问题描述 投票:0回答:1

我需要处理几条记录,为此,最近我安装了Oracle 11g数据库,并使用该数据库连接我的应用程序,并且每次检查记录时,都使用while循环来运行批处理作业以处理这些记录。是否存在,如果退出循环继续。当我运行批处理作业的第一个记录时,第一次使用m_dbConnection.prepareStatement(query);它将获取记录并完成处理,第二次检查该记录时,我们第二次调用m_dbConnection.prepareStatement(query);时将调用相同的语句java.sql.SQLException: Connection has already been closed.

请在下面找到完整的例外:

java.sql.SQLException: Connection has already been closed.
        at weblogic.jdbc.wrapper.PoolConnection.checkConnection(PoolConnection.java:55)
        at weblogic.jdbc.wrapper.Connection.preInvocationHandler(Connection.java:92)
        at weblogic.jdbc.wrapper.Connection.prepareStatement(Connection.java:482)
        at com.orbitreasury.infrastructure.DBConnection.getPreparedStatement(DBConnection.java:464)
        at com.orbitreasury.moneymarket.businessimplementation.entity.RepriceEntity.getRepriceDeals(RepriceEntity.java:126)
        at com.orbitreasury.moneymarket.businessimplementation.RepriceDeals.updateRepriceDeals(RepriceDeals.java:896)
        at com.orbitreasury.moneymarket.eventhandler.RepriceJobEvent.processEvent(RepriceJobEvent.java:91)
        at com.orbitreasury.common.control.NavigationController.processEvent(NavigationController.java:232)
        at com.orbitreasury.common.control.NavigationController.onEvent(NavigationController.java:121)
        at WebRequestController.processLocalRequest(WebRequestController.java:348)
        at WebRequestController.doPost(WebRequestController.java:138)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
        at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
        at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
        at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:292)
        at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:175)
        at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3495)
        at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
        at weblogic.security.service.SecurityManager.runAs(Unknown Source)
        at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2180)
        at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2086)
        at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1406)
        at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
        at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)
java.sql.SQLException: Connection has already been closed.
        at weblogic.jdbc.wrapper.PoolConnection.checkConnection(PoolConnection.java:55)
        at weblogic.jdbc.wrapper.Connection.preInvocationHandler(Connection.java:92)
        at weblogic.jdbc.wrapper.Connection.prepareStatement(Connection.java:482)
        at com.orbitreasury.infrastructure.DBConnection.getPreparedStatement(DBConnection.java:464)
        at com.orbitreasury.moneymarket.businessimplementation.entity.RepriceEntity.getRepriceDeals(RepriceEntity.java:126)
        at com.orbitreasury.moneymarket.businessimplementation.RepriceDeals.updateRepriceDeals(RepriceDeals.java:896)
        at com.orbitreasury.moneymarket.eventhandler.RepriceJobEvent.processEvent(RepriceJobEvent.java:91)
        at com.orbitreasury.common.control.NavigationController.processEvent(NavigationController.java:232)
        at com.orbitreasury.common.control.NavigationController.onEvent(NavigationController.java:121)
        at WebRequestController.processLocalRequest(WebRequestController.java:348)
        at WebRequestController.doPost(WebRequestController.java:138)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
        at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
        at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
        at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:292)
        at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:175)
        at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3495)
        at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
        at weblogic.security.service.SecurityManager.runAs(Unknown Source)
        at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2180)
        at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2086)
        at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1406)
        at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
        at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)
java oracle11g weblogic
1个回答
0
投票

您没有添加代码,因此很难知道是什么问题。

我猜您已经添加了一些“最终”块,并关闭了连接-m_dbConnection

所以您不能再使用它。仅在触摸完数据库后尝试关闭。

© www.soinside.com 2019 - 2024. All rights reserved.