Обработка транзакций Postgresql с помощью Java - PullRequest
7 голосов
/ 23 ноября 2011

У меня есть два блока запросов с подготовленным состоянием.

Это первое:

String sql = "update cikan_malzeme set miktar = ? where proje_id = ? and malzeme_id = ?";
PreparedStatement prep = dbConnect.connection.prepareStatement(sql);
prep.setFloat(1, toplam);
prep.setInt(2, pid);
prep.setInt(3, mid);
prep.executeUpdate();

И это второе:

String sql2 = "update malzemeler set miktar = ? where malz_adi = ?";
PreparedStatement prep2 = dbConnect.connection.prepareStatement(sql2);
prep2.setFloat(1, fark);
prep2.setString(2, malzemeadi);
prep2.executeUpdate();

теперь я хочу выполнить их с транзакцией BEGIN; и COMMIT; Как я могу обработать транзакцию с prepareStatement?

Заранее спасибо.

Ответы [ 2 ]

8 голосов
/ 23 ноября 2011

Установить автоматическую фиксацию на false.

Поместите ваши PreparedStatements в блок try. Совершить в конце; откат в блоке захвата.

Вот как это обычно делается голыми JDBC.

http://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html

Если вы используете EJB3 или Spring, вы можете добавить менеджер транзакций и указать их декларативно. Это более изощренно и гибко.

7 голосов
/ 23 ноября 2011

Вы должны использовать Connection.setAutoCommit(false) для отключения автоматической фиксации и Connection.commit() и Connection.rollback().

При автоматическомфиксация отключена, транзакция будет запускаться автоматически при первом выполнении команды или запроса, требующего транзакции.

Не следует использовать команды управления транзакциями, относящиеся к базе данных (так как драйвер, скорее всего, будет делать дополнительныеочистка ресурсов при выполнении commit () или rollback ().

...