Java OracleDataSource连接上的PreparedStatement executeUpdate不会自动提交

Java OracleDataSource连接上的PreparedStatement executeUpdate不会自动提交,java,oracle,jdbc,java-8,java-7,Java,Oracle,Jdbc,Java 8,Java 7,调用preparedStatement.executeUpdate()成功返回(行数已更新)。但数据库并不反映更新。在ojdbc7.jar中看到这个问题(尝试了Java7和Java8SES) 如果您使用的是executeUpdate()或execute(),则需要执行connection.commit()。 如果您不想执行提交,那么可以选择:prepareStatement()不需要提交()。调用conn.commit()或启用autoCommit选项。@Brandon,我有conn.setAu

调用preparedStatement.executeUpdate()成功返回(行数已更新)。但数据库并不反映更新。在ojdbc7.jar中看到这个问题(尝试了Java7和Java8SES)


如果您使用的是executeUpdate()或execute(),则需要执行connection.commit()。
如果您不想执行提交,那么可以选择:prepareStatement()不需要提交()。

调用
conn.commit()
或启用
autoCommit
选项。@Brandon,我有conn.setAutoCommit(true)。我还要做什么才能启用自动提交?哦,我没看到。我不熟悉
PoolDataSource
。它看起来像一个Oracle连接池库。我找不到任何池级自动提交设置。我真的不确定。在声明变量之前,如何使用变量
pds
?您应该发布一个可验证的示例,而不是一段无法工作的代码。除此之外,这似乎是Oracle的一个问题,应该由Oracle的客户支持部门来处理…
final String UPDATE_SQL = "UPDATE myPortfolio SET stock = ? WHERE key = ?";
    final String stock = 'SO';// pre ipo :)
    final long key = 12345l;

    try (Connection conn = pds.getConnection(); PreparedStatement proc = conn.prepareStatement(UPDATE_SQL)) {
        //conn.setAutoCommit(false); --> this works
        conn.setAutoCommit(true); // this is the default...but making sure
        proc.setString(1, stock);
        proc.setLong(2, key);
        int rowcount = proc.executeUpdate();
        //conn.commit(); --> this works

        logger.info("Updated {} rows. SQL = {}. stock = {}, key = {}, InboundKey = {}", rowcount, UPDATE_SQL, stock, key);
        // logs 1 row updated. But DB still shows stale data (old stock) for key 12345l.
    } catch (SQLException E) {
        throw new PersistenceException(E);
    }

    // Pool data source settings
    PoolDataSource        pds = PoolDataSourceFactory.getPoolDataSource();
    pds.setConnectionFactoryClassName("oracle.jdbc.pool.OracleDataSource");
    pds.setConnectionPoolName(cacheName);
    pds.setURL(dbUrl);
    pds.setUser(username);
    pds.setPassword(password);

    pds.setMinPoolSize(5);
    pds.setMaxPoolSize(10);
    pds.setInitialPoolSize(7);
    pds.setInactiveConnectionTimeout(10);