Tôi chỉ nâng cấp lên trình điều khiển jdbc mới từ classes12.jar lên ojdbc7.jarjava.sql.SQLException: Không thể cam kết với tự động cam kết đặt tại oracle.jdbc.driver.PhysicalConnection.commit (PhysicalConnection.java:4443)
ứng dụng của tôi đã ném một ngoại lệ khi đang chạy với ojdbc7.jar:
java.sql.SQLException: Could not commit with auto-commit set on
at oracle.jdbc.driver.PhysicalConnection.commit(PhysicalConnection.java:4443)
at oracle.jdbc.driver.PhysicalConnection.commit(PhysicalConnection.java:4490)
at oracle.jdbc.driver.T4CConnection.doSetAutoCommit(T4CConnection.java:943)
at oracle.jdbc.driver.PhysicalConnection.setAutoCommit(PhysicalConnection.java:4
ứng dụng của tôi vẫn chạy bình thường với classes12.jar.
tôi nghiên cứu trên oracle:
ngoại lệ này được nâng lên đối với bất kỳ một trong các trường hợp sau:
- Khi cam kết tự động trạng thái được thiết lập là true và cam kết hoặc phương pháp rollback được gọi
- Khi trạng thái mặc định của tự động cam kết không được thay đổi và phương thức cam kết hoặc quay lại được gọi là
- Khi giá trị của thuộc tính COMMIT_ON_ACCEPT_CHANGES là đúng và phương thức cam kết hoặc quay vòng được gọi sau khi gọi phương thức acceptChanges trên một rowset
Nhưng tôi không thể tìm thấy sai lầm trong nguồn của mình. Xin hãy giúp tôi giải thích thêm về lỗi này.
Hãy thử thiết lập 'connection.setAutoCommit (false); ' – user432
Hãy chắc chắn rằng bạn đang sử dụng JDK7: đó là những gì các "7" có nghĩa là trong "ojdbc7" . Các classes12.jar là JDK 1.2 vintage - bạn nên đã thay đổi năm trước. Đừng để bị lừa bởi "ứng dụng của tôi vẫn chạy bình thường với classes12.jar". Bạn không nên sử dụng điều đó một lần nữa. – duffymo
Cho callstack tôi nghi ngờ một lỗi trong trình điều khiển. Khi chuyển đổi giữa autocommit 'true' và' false' (và ngược lại), trình điều khiển phải cam kết giao dịch đang hoạt động và có vẻ như cam kết này không thành công vì trình điều khiển ở chế độ tự động. Mặt khác, tôi hy vọng Oracle sẽ kiểm tra kỹ lưỡng trình điều khiển của họ cho các loại công tắc trạng thái cơ bản này. –