Oracle PreparedStatement.executeUpdate()是否通过抛出SQLException实例来处理连接池的耗尽?

时间:2011-07-18 01:42:50

标签: java oracle connection-pooling

如果连接池耗尽,Oracle PreparedStatement.executeUpdate() API会抛出类型SQLException的异常吗?

我的应用程序代码(KMDatabaseDAO.insert())正在调用Oracle PreparedStatement.executeUpdate() API,但是,该方法似乎只抛出SQLException,因为现有的生产代码已经完全弄乱了日志记录级别,我无法恢复打印出来的实际日志。

以下是线程转储。

"ExecuteThread: '79' for queue: 'weblogic.kernel.Default'" daemon prio=1 tid=0x1b459f28 nid=0x5c62 runnable [1842b000..1842c228]
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(SocketInputStream.java:129)
    at oracle.net.ns.Packet.receive(Unknown Source)
    at oracle.net.ns.DataPacket.receive(Unknown Source)
    at oracle.net.ns.NetInputStream.getNextPacket(Unknown Source)
    at oracle.net.ns.NetInputStream.read(Unknown Source)
    at oracle.net.ns.NetInputStream.read(Unknown Source)
    at oracle.net.ns.NetInputStream.read(Unknown Source)
    at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:979)
    at oracle.jdbc.driver.T4CMAREngine.unmarshalSB1(T4CMAREngine.java:951)
    at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:435)
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:182)
    at oracle.jdbc.driver.T4CPreparedStatement.execute_for_rows(T4CPreparedStatement.java:630)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1081)
    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:2905)
    at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:2977)
    - locked <0x3339ad48> (a oracle.jdbc.driver.T4CPreparedStatement)
    - locked <0x2f8327d0> (a oracle.jdbc.driver.T4CConnection)
    at weblogic.jdbc.wrapper.PreparedStatement.executeUpdate(PreparedStatement.java:147)
    at com.sia.sd.db.dao.KMDatabaseDAO.insert(KMDatabaseDAO.java:125)

Oracle PreparedStatement API

1 个答案:

答案 0 :(得分:3)

你有一个PreparedStatement的事实意味着你已经从池中检索了一个连接,所以不,池没有用尽,并且执行PreparedStatement不能用尽它,因为这样做不会检索另一个连接从泳池。