2011-11-23 30 views
6

tôi có hai khối truy vấn với readyStatement.Xử lý giao dịch Postgresql với java

Đây là lần đầu tiên:

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

Và đây là thứ hai:

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

bây giờ tôi muốn thực hiện chúng với các giao dịch BEGIN; và COMMIT; Làm cách nào tôi có thể xử lý giao dịch với readyStatement?

Xin cảm ơn trước.

Trả lời

8

Đặt cam kết tự động thành sai.

Đặt PreparedStatements của bạn trong khối thử. Cam kết ở cuối; rollback trong khối catch.

Đó là cách nó thường được thực hiện trong xương trần JDBC.

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

Nếu bạn sử dụng EJB3 hoặc mùa xuân, bạn có thể thêm người quản lý giao dịch và xác định chúng khai báo. Điều đó phức tạp và linh hoạt hơn.

+0

Liệu nó cần thiết trên ô tô chế độ cam kết cho SELECT truy vấn như setAutoCommit (true) sau khi tạo phiên hoặc cấu hình trong tập tin ngủ đông Tôi đang sử dụng hibernate với postgresql – Satya

+0

Không cần logic giao dịch nếu bạn đang thực hiện một SELECT riêng của nó. – duffymo

+0

Có nghĩa là chỉ cho các truy vấn không chọn nó được yêu cầu và cho các truy vấn chọn nó không được yêu cầu phải – Satya

6

Bạn nên sử dụng Connection.setAutoCommit(false) để tắt tự động cam kết và Connection.commit()Connection.rollback().

Khi tự động cam kết bị tắt, giao dịch sẽ tự động được khởi động trong lần đầu tiên bạn thực hiện lệnh hoặc truy vấn yêu cầu giao dịch.

Bạn không nên sử dụng các lệnh điều khiển cơ sở dữ liệu giao dịch cụ thể (như người lái xe rất có thể sẽ làm dọn dẹp thêm các nguồn lực khi một cam kết() hoặc rollback() được ban hành.

+0

Có cần thiết trên chế độ tự động cam kết cho các truy vấn SELECT như setAutoCommit (true) sau khi tạo phiên hoặc cấu hình trong tệp ngủ đông không? Tôi đang sử dụng hibernate với postgresql. – Satya

+0

@Satya, vui lòng đăng câu hỏi mới, nhận xét không dành cho các câu hỏi tiếp theo. –

+0

Chắc chắn. Có bất kỳ trùng lặp tồn tại, nhưng không tìm thấy bất cứ điều gì, bạn có thể xin vui lòng chia sẻ bất kỳ liên kết bạn tìm thấy bất kỳ – Satya

Các vấn đề liên quan