java

2011-11-23 10 views
6

ile Postgresql işlem yönetimi readyStatement ile iki blok sorgularım var.java

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

Ve bu ikinci:

Bu

ilk

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

şimdi BEGIN işlemle onları yürütmek istiyoruz; ve COMMIT; Hazırlık ile nasıl işlem yapabilirim?

Şimdiden teşekkürler.

cevap

8

Otomatik işlemi false olarak ayarlayın.

PreparedStatements'ınızı bir try bloğa koyun. Sonunda taahhüt; catch bloğunda geri alma.

Yani genellikle çıplak kemikleri JDBC içinde işler böyle yürüyor.

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

Eğer EJB3 veya Spring kullanarak, bir işlem yöneticisi ekleyebilir ve bildirimli bunları belirtebilirsiniz. Bu daha sofistike ve esnek.

+0

o oto üzerinde gerekli mu için modu taahhüt SELECT queries benzeri setAutoCommit (true) after creating session veya configuring in hibernate file? I'm using hibernate with postgresql. – Satya

+0

No need for transactional logic if sen're doing bir SELECT üzerinde its own. It's for write transactions ve managing the rollback segment – duffymo

+0

Yalnızca seçilmemiş sorgularda kullanılması gerekenler ve seçim sorguları için gerekli değil Doğru – Satya

6

Otomatik taahhüt ve Connection.commit() ve Connection.rollback()'u devre dışı bırakmak için Connection.setAutoCommit(false) kullanmalısınız.

devre dışıdır otomatik taahhüt

bir işlem otomatik bir işlem gerektiren bir komut veya sorgu çalıştırmak ilk kez başlatılacak.

Sen verilir) sürücü büyük olasılıkla kaynakların ek temizleme yapacak atarken ((işlemek) veya geri alma (veritabanı belirli işlem kontrol komutları kullanarak olmamalıdır

.

+0

Oturum oluşturduktan veya hazırda bekletme dosyasında yapılandırıldıktan sonra setAutoCommit (true) gibi SELECT sorguları için otomatik işlem modunda mı gerekiyor? Postgresql ile hazırda bekliyorum. – Satya

+0

@Satya lütfen yeni bir soru gönderin, yorumlar takip eden sorular için tasarlanmamıştır. –

+0

Elbette. Herhangi bir kopya var mı, ama bir şey bulamadınız mı, herhangi bir bağlantıyı bulduğunuz herhangi bir bağlantıyı paylaşır mısınız – Satya