2011-11-23 13 views
6

Mam dwa bloki zapytań z przygotowanym zestawieniem.Obsługa transakcji PostgreSQL przy użyciu java

To pierwszy:

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(); 

I to jest drugi:

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(); 

teraz chcę wykonać je z transakcji BEGIN; i COMMIT; Jak mogę obsłużyć transakcję z readyStatement?

Z góry dziękuję.

Odpowiedz

8

Ustaw automatyczne zatwierdzanie na false.

Umieść swoje PreparedStatements w bloku try. Zobowiązaj się na końcu; wycofanie w bloku catch.

Tak to zwykle robi się w gołych kościach JDBC.

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

Jeśli używasz EJB3 lub wiosną można dodać menedżera transakcji i określić je deklaratywnie. To jest bardziej wyrafinowane i elastyczne.

+0

Czy ona potrzebna na auto tryb zobowiązać do WYBIERZ zapytania takie jak setAutoCommit (true) po utworzeniu sesji lub konfiguracji w pliku hibernacji Używam hibernacji z postgresql – Satya

+0

Nie musisz logiki transakcyjnej, jeśli robisz SELECT na własną rękę, jest to dla transakcji zapisu i zarządzania segmentem wycofania – duffymo

+0

Oznacza tylko dla zapytań innych niż wybrane, a dla zapytań wybranych nie jest wymagana. – Satya

6

Należy użyć funkcji Connection.setAutoCommit(false), aby wyłączyć automatyczne zatwierdzanie i Connection.commit() i Connection.rollback().

Gdy automatyczne zatwierdzanie jest wyłączone, transakcja zostanie uruchomiona automatycznie przy pierwszym wykonaniu polecenia lub zapytania, które wymaga transakcji.

Nie należy przy użyciu poleceń sterujących dana transakcja bazy danych (jako kierowca najprawdopodobniej zrobić dodatkowe oczyszczanie zasobów gdy commit() lub rollback() została wydana.

+0

Czy jest potrzebne w trybie automatycznego zatwierdzania do wybierania zapytań, takich jak setAutoCommit (true) po utworzeniu sesji lub konfiguracji w pliku hibernacji? Używam hibernacji z postgresql. – Satya

+0

@Satya proszę napisać nowe pytanie, komentarze nie są przeznaczone do dalszych pytań. –

+0

Pewnie. Czy istnieje jakiś duplikat, ale nic nie znalazłem, możesz udostępnić dowolny link, który znalazłeś. – Satya