Java oracle 12c的executeUpdate正在无限期运行

Java oracle 12c的executeUpdate正在无限期运行,java,database,oracle,oracle12c,Java,Database,Oracle,Oracle12c,我有一个更新查询java代码,它在oracle 11中运行得非常好,但由于某些原因,executeUpdate在oracle 12中无限期运行 for (String strField : hmColumnData.keySet()) { String strUpdateQuery = "UPDATE MODEL_DATA SET " + strField + " = ? WHERE CONNECTION_ID = ?"; try { pStmt = conn.

我有一个更新查询java代码,它在oracle 11中运行得非常好,但由于某些原因,executeUpdate在oracle 12中无限期运行

for (String strField : hmColumnData.keySet()) {
    String strUpdateQuery = "UPDATE MODEL_DATA SET " + strField + " = ? WHERE CONNECTION_ID = ?";

    try {
        pStmt = conn.prepareStatement(strUpdateQuery);
        Clob clob = conn.createClob();
        if (clob != null) {
            String dataString = hmColumnData.get(strField);
            dataString = dataString == null ? "" : dataString;
            clob.setString(1, "Test string");
            pStmt.setClob(1, clob);
        }
        pStmt.setLong(2, iConnId);
        pStmt.executeUpdate();
        conn.commit();
    } catch (SQLException e) {
        Logger.error("Error occured while updating the CLOB data field from the DataBase", e);
        conn.rollback();
    }
}
以下是该特定线程的线程转储

"model-thread-0" #407 prio=5 os_prio=0 tid=0x000000002ba43000 nid=0x558c runnable [0x000000007c71e000]
   java.lang.Thread.State: RUNNABLE
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.socketRead(Unknown Source)
        at java.net.SocketInputStream.read(Unknown Source)
        at java.net.SocketInputStream.read(Unknown Source)
        at oracle.net.ns.Packet.receive(Packet.java:282)
        at oracle.net.ns.DataPacket.receive(DataPacket.java:103)
        at oracle.net.ns.NetInputStream.getNextPacket(NetInputStream.java:230)
        at oracle.net.ns.NetInputStream.read(NetInputStream.java:175)
        at oracle.net.ns.NetInputStream.read(NetInputStream.java:100)
        at oracle.net.ns.NetInputStream.read(NetInputStream.java:85)
        at oracle.jdbc.driver.T4CSocketInputStreamWrapper.readNextPacket(T4CSocketInputStreamWrapper.java:122)
        at oracle.jdbc.driver.T4CSocketInputStreamWrapper.read(T4CSocketInputStreamWrapper.java:78)
        at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1179)
        at oracle.jdbc.driver.T4CMAREngine.unmarshalSB1(T4CMAREngine.java:1155)
        at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:279)
        at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:186)
        at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:521)
        at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:205)
        at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:1008)
        at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1307)
        at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3449)
        at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3530)
        - locked <0x000000062378b910> (a oracle.jdbc.driver.T4CConnection)
        at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1350)
        at com.eqtechnologic.eqube.mapper.init.eQModelDataManager.updateClobData(eQModelDataManager.java:731)
        at com.eqtechnologic.eqube.mapper.init.eQModelWriteObserverImpl.updateSemanticDataInDB(eQModelWriteObserverImpl.java:123)
        at com.eqtechnologic.eqube.mapper.init.eQModelWriteObserverImpl.saveCustomXML(eQModelWriteObserverImpl.java:156)
        at com.eqtechnologic.eqube.modelutil.ModelLoaderTask.b(ModelLoaderTask.java:120)
        at com.eqtechnologic.eqube.modelutil.ModelLoaderTask.execute(ModelLoaderTask.java:67)
        at com.eqtechnologic.eqube.concurrent.AbstractThread.run(AbstractThread.java:279)
        at com.eqtechnologic.eqube.concurrent.wrapper.RunnableWrapper.execute(RunnableWrapper.java:30)
        at com.eqtechnologic.eqube.concurrent.AbstractThread.run(AbstractThread.java:279)
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
        at java.util.concurrent.FutureTask.run(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)

   Locked ownable synchronizers:
        - <0x0000000685d9b8b0> (a java.util.concurrent.ThreadPoolExecutor$Worker)
“model-thread-0”#407 prio=5 os_prio=0 tid=0x000000002ba43000 nid=0x558c runnable[0x000000007c71e000]
java.lang.Thread.State:可运行
位于java.net.SocketInputStream.socketRead0(本机方法)
位于java.net.SocketInputStream.socketRead(未知源)
位于java.net.SocketInputStream.read(未知源)
位于java.net.SocketInputStream.read(未知源)
位于oracle.net.ns.Packet.receive(Packet.java:282)
位于oracle.net.ns.DataPacket.receive(DataPacket.java:103)
位于oracle.net.ns.NetInputStream.getNextPackage(NetInputStream.java:230)
位于oracle.net.ns.NetInputStream.read(NetInputStream.java:175)
位于oracle.net.ns.NetInputStream.read(NetInputStream.java:100)
位于oracle.net.ns.NetInputStream.read(NetInputStream.java:85)
位于oracle.jdbc.driver.T4CSocketInputStreamWrapper.readnextPackage(T4CSocketInputStreamWrapper.java:122)
位于oracle.jdbc.driver.t4CSocketingInputStreamWrapper.read(t4CSocketingInputStreamWrapper.java:78)
位于oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1179)
位于oracle.jdbc.driver.T4CMAREngine.unmarshalSB1(T4CMAREngine.java:1155)
位于oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:279)
位于oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:186)
位于oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:521)
位于oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:205)
位于oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:1008)
在oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1307)
位于oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3449)
在oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3530)
-锁定(一个oracle.jdbc.driver.T4CConnection)
OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1350)
位于com.eqtechnologic.eqbe.mapper.init.eQModelDataManager.updateClobData(eQModelDataManager.java:731)
在com.eqtechnologic.eqbe.mapper.init.eQModelWriteObserverImpl.UpdateManticDataIndb(eQModelWriteObserverImpl.java:123)上
在com.eqtechnology.eqbe.mapper.init.eqmodelwriteobserver impl.saveCustomXML(eqmodelwriteobserver impl.java:156)上
在com.eqtechnologic.eqbe.modelutil.ModelLoaderTask.b(ModelLoaderTask.java:120)上
在com.eqtechnologic.eqbe.modelutil.ModelLoaderTask.execute(ModelLoaderTask.java:67)上
位于com.eqtechnologic.eqbe.concurrent.AbstractThread.run(AbstractThread.java:279)
位于com.eqtechnologic.eqbe.concurrent.wrapper.runnablerrapper.execute(runnablerrapper.java:30)
位于com.eqtechnologic.eqbe.concurrent.AbstractThread.run(AbstractThread.java:279)
位于java.util.concurrent.Executors$RunnableAdapter.call(未知源)
位于java.util.concurrent.FutureTask.run(未知源)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(未知源)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(未知源)
位于java.lang.Thread.run(未知源)
锁定可拥有的同步器:
-(一个java.util.concurrent.ThreadPoolExecutor$Worker)
为了验证我正在写入的数据没有引起问题,我修改了字符串

在使用连接之前,我尝试提交连接,只是为了验证是否有其他事务更改处于搁置状态,但它仍然被卡住


我不知道我遗漏了什么,也不知道我在数据库方面有多少知识,所以请给我一些指导。

好吧,这句话:“我在使用连接之前尝试提交连接,只是为了验证是否有其他事务更改被搁置”不起作用。您不能提交其他事务,必须由他们来执行。@Littlefoot-是的,您完全正确,但由于这是一个遗留代码,无法轻松调试,为了找出是否存在问题,我尝试了这个案例。如果是这样的话,那么我应该先查看代码的其他部分,看看是性能问题还是阻塞问题。运行时,为应用程序查询V$SESSION,并检查LOCKWAIT和BLOCKING_SESSION列。如果它们不为null,则有人正在阻止您。如果它们为null,那么这是一个性能问题,我们可以从那里开始工作