PreparedStatement executeUpdate для соединения OracleDataSource не выполняет автоматическую фиксацию

1

Вызов готовогоStatement.executeUpdate() возвращается успешно (с количеством обновленных строк). Но БД не отражает обновление. Увидев эту проблему с помощью ojdbc7.jar (попробовал как java 7, так и java 8 SE).

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);
  • 2
    Либо вызовите conn.commit() либо включите опцию autoCommit .
  • 0
    @ Брэндон, у меня есть conn.setAutoCommit (правда). Что еще я должен сделать, чтобы включить автоматическую фиксацию?
Показать ещё 2 комментария
Теги:
java-8
jdbc
java-7

1 ответ

0

Если вы используете executeUpdate() или execute(), вам необходимо выполнить connection.commit(). И если вы не хотите выполнять коммит, то вы можете пойти на: prepareStatement() не требует commit().

Ещё вопросы

Сообщество Overcoder
Наверх
Меню