Will Oracle PreparedStatement.executeUpdate() API throw an exception of type SQLException if the connection pool is exhausted?
My application codes (KMDatabaseDAO.insert()) is calling the Oracle PreparedStatement.executeUpdate() API, however, the method seems to only throw an SQLException, because existing production codes have pretty messed up the logging level, i am unable to recover the actual logs printing out.
Below is the thread dump taken.
"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)
The fact that you have a PreparedStatement means that you’ve already retrieved a connection from the pool, so no, the pool is not exhausted, and executing a PreparedStatement can’t exhaust it because doing so doesn’t retrieve another Connection from the pool.