2011-11-23 10 views
6

私はpreparedStatementで2つのクエリブロックを持っています。javaを使ったPostgresqlトランザクション処理

これが最初である:

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トランザクションにそれらを実行します。コミット。 preparedStatementでトランザクションを処理するにはどうすればよいですか?

ありがとうございます。

答えて

8

自動コミットをfalseに設定します。

tryブロックにPreparedStatementを配置します。最後にコミットしてください。 catchブロックでロールバックします。

これは、それが通常、裸のJDBC JDBCで行われる方法です。

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

あなたはEJB3やSpringを使用する場合は、トランザクションマネージャを追加し、宣言して指定することができます。より洗練された柔軟性があります。

+0

それは自動で必要なんのモードをコミットセッションを作成した後、またはhibernateファイルを設定した後に、setAutoCommit(true)のようなSELECTクエリを実行しますか?私はpostgresqlでhibernateを使用しています – Satya

+0

SELECTを単独で実行している場合はトランザクションロジックは必要ありません。 。 – duffymo

+0

必須ではない非選択照会のみを意味し、選択照会の場合は必須ではありません。 – Satya

6

自動コミットを無効にするにはConnection.setAutoCommit(false)を使用し、Connection.commit()Connection.rollback()を使用する必要があります。

自動コミットを無効にすると、トランザクションを必要とするコマンドまたはクエリを初めて実行するときに、トランザクションが自動的に開始されます。

コミット時にドライバーが最も可能性が高い(リソースの追加のクリーンアップを行いますとあなたは)(データベース固有のトランザクション制御コマンドを使用すべきではないか、ロールバック()が発行されます。

+0

セッションを作成した後、または休止状態のファイルを設定した後、setAutoCommit(true)のようなSELECTクエリの自動コミットモードで必要ですか?私はpostgresqlでhibernateを使用しています。 – Satya

+0

@Satya新しい質問を投稿してください、コメントはフォローアップの質問のためのものではありません。 –

+0

重複がありますが、何も見つかりませんでした。あなたが見つけたリンクを共有してください。 – Satya

関連する問題