在JDBC中,我們可以說,只要我們獲得連接,交易就會開始,並在關閉連接時完成 。這是正確的嗎?如果可以,我們可以說在不同的請求共享 相同的連接,即使所有未提交的交易將全部可見 所有請求?JDBC事務開始
JDBC事務開始
回答
@BalusC - 這是不正確的。默認情況下,autocommit設置爲true,這意味着事務在任何JDBC操作之前開始,並在該單一操作後結束RIGHT,而不是在連接關閉時結束。
但你說得對,共享連接確實不好,如果你想多線程你的數據庫,最好是以你有線程池的方式處理它(在java.util.concurrent中查找ThreadPoolExecutor)和對於每個線程,您都會獲得單獨的連接。 ConnectionPool也是一個不錯的選擇,但我寧願通過ThreadPool來限制它 - 這種方式永遠不會有一個線程等待來自池的連接。
沒錯。這是默認行爲。在完成所有查詢後,檢索連接並提交connection.commit()
後,您可以通過將自動提交設置爲false
connection.setAutoCommit(false)
來接管此控件。
但是,在不同的請求(線程)之間共享連接本身就是一個糟糕的設計。你的應用程序是這種方式不是線程安全的。您不想在不同線程之間共享相同的連接。如果你只想要消除連接數據庫的成本,那麼你應該考慮使用連接池。
訪問數據庫時的第一條規則。 每一個非事務性操作中應:
1.open連接,如果有連接池,然後從池中獲取 2.連接創建執行語句 3.如果在讀取查詢然後映射結果集。 4.關閉結果集。 5.關閉聲明。 6.關閉連接。
,如果你想你的操作是在交易,那麼你應該考慮這種方法:
操作1:1。 getSharedConnection 2.創建/執行語句 3.如果在讀取查詢然後映射結果集。 4.關閉ResultSet 5. close語句
操作2: 同操作1.
和該事務:
公共無效updateInTransaction(){ 連接康恩= pool.getConnection() ; //或者你可以創建一個新的連接 conn.setAutocommit(false); operation1(conn); operation2(conn); conn.close; }
這只是小應用程序的基礎知識。 如果你正在開發更大的應用程序,你應該使用來自Springsoruce的相同框架,如JDBCTemplates。
- 1. JDBC開始事務失敗休眠(破碎的管道)
- 2. JDBC事務
- 3. jdbc開始失敗
- 4. 如何使用事務(開始事務,提交事務)?
- 5. JDBC確定活動事務
- 6. 當回滾JDBC事務
- 7. JDBC中的事務狀態
- 8. 混合JTA和JDBC事務
- 9. JDBC事務不起作用
- 10. sqlite3/C事務開始結束 - 溢出?
- 11. 春天開始一個事務由新
- 12. 事務開始時的監聽器
- 13. SQL開始事務沒有提交
- 14. 從BroadcastReceiver開始從事服務活動
- 15. 開始事務時出現SqlServer.Management.SMO.Server錯誤
- 16. 回滾事務請求沒有相應的開始事務
- 17. 在MS SQL中開始事務並提交事務
- 18. 開始新的事務是否強制當前事務提交?
- 19. TransactionSystemException:無法回滾Hibernate事務;事務未開始
- 20. 以JDBC開始的先決條件
- 21. 如何做包含JDBC和JMS事務的XA事務?
- 22. 當事務處於非事務中時回滾Spring JDBC操作
- 23. 在hibernate事務中創建一個簡單的jdbc事務
- 24. 如何在XA事務中引入Spring JDBC事務?
- 25. Windows服務始終「開始」
- 26. Spring集成和JDBC在單個事務
- 27. 如何在JDBC中啓動事務?
- 28. Sybase中的JDBC事務控制
- 29. Mule 3.3.0 Jdbc事務不需要提交
- 30. 通過jOOQ事務訪問JDBC連接