我有一個Java Web應用程序,其中我的客戶端連接到Web服務以使用它們的數據更新MySQL數據庫(使用JDBC)。我想要做的是每次客戶端連接並使用Web服務的操作時,檢查所請求的表是否存在,而不使用MetaData。我想每次只執行INSERT
,連接到Web服務的第一個客戶端將導致我會捕獲的SQLException
,查看它的ErrorCode
以決定它是否由不存在的表引起,如果是這種情況,它將(在catch子句)創建表,插入由於Exception而無法提前插入的數據,然後創建一個線程來處理該特定客戶端(例如,檢查它是否會每隔x秒刷新其在數據庫中的條目)。此實現是否可以完成這項工作?線程是否能夠正常運行,即使它會在Exception的catch子句中啓動?使用SQLException檢查Java程序中是否存在MySQL表格
0
A
回答
4
按照您描述的方式執行此操作會將您的應用程序綁定到MySQL,因爲返回的異常將不得不作爲MySQL特定來檢查,以確定它們是否由缺少的表導致,而不是其他問題。大多數開發人員認爲將應用程序綁定到像這樣的特定數據庫是不好的做法。另外,如果你同時得到2個同一個不存在表的請求,你很可能會得到2個線程試圖創建同一個表,並且其中一個會嘗試創建一個已經存在的表,所以你需要做一些同步。
我建議您重新檢查您的應用程序設計,以便提前存在所有表。如果他們絕對必須動態創建,我會創建一個單元對象,它使用MetaData來確定每個表的存在情況,然後將該知識緩存在對象本身中,以便您只需在Web的每個生命週期中搜索每個表的存在應用。您還可以同步此對象上的方法,以防止2個線程一次嘗試創建同一個表。
1
使用異常作爲流量控制的一種手段是一種反模式,您應該避免這樣做。如果您擔心查詢每個連接的元數據的性能影響,則可以緩存結果。
相關問題
- 1. Java - 如何檢查在MySQL表中是否存在用戶名
- 2. 檢查excel中是否存在表格
- 3. 檢查Java應用程序是否在
- 4. 檢查bash中是否存在程序
- 5. 檢查是否存在多個mysql表
- 6. MySQL檢查表是否已經存在
- 7. MySQL檢查表是否存在錯誤
- 8. 檢查mysql表是否已經存在
- 9. 使用LINQ檢查數據庫中是否存在表格
- 10. 如何檢查數據庫是否存在於mysql程序中
- 11. 檢查表是否存在使用PDO
- 12. 檢查用戶名是否存在於MySQL Java中
- 13. 檢查程序是否存在
- 14. 檢查用戶是否存在於mysql
- 15. 檢查mysql用戶是否存在
- 16. 檢查mysql中是否存在值
- 17. 檢查mysql表中是否存在不存在的記錄
- 18. 檢查表是否存在
- 19. 檢查表是否存在
- 20. 檢查表是否存在
- 21. 檢查圖像中是否存在Java
- 22. 檢查Firebase中是否存在ID [Java]
- 23. 檢查Java中是否存在日期
- 24. 檢查java中是否存在字符
- 25. MySQL程序檢查插入之前是否存在記錄
- 26. 檢查是否存在應用程序使用AppleScript
- 27. 檢查表中是否存在表
- 28. 檢查MySQL表是否存在以及是否創建它們
- 29. 如何檢查程序包中是否存在程序?
- 30. 檢查列表是否存在於Mysql表中通過php
謝謝你的回答!在我的方式中,它不是嘗試創建表的線程,表將在原始操作的catch子句內部創建,然後線程將以'Connection'對象作爲參數開始。 – nikos 2012-01-10 14:51:22