關於更換jdbc驅動的一些碎碎念

2021-08-30 01:35:21 字數 1182 閱讀 3934

關於更換jdbc驅動的一些碎碎念

由於專案中**對中文支援不好,而且使用者在使用時會不經意間貼上一些特殊字元,一旦將這些字元放在乙個鏈結裡時,就會出現亂碼.主要問題集中反應在orcle 10g的jdbc驅動中乙個方法在對字元做轉換時丟擲異常.據oracle官方說,該異常是該驅動版本的乙個bug,而且bug list中寫的很明確.在進一步搜尋後發現,11g的最新驅動ojdbc6已經修復了這個問題,於是馬上換上這個驅動進行測試,結果所有都顯示正常.

然而,就是在更換驅動的時候,出現了問題.

第一,我們使用的資料庫是oracle 10g.

第二,程式不能增刪改查,體現在插入時出現主鍵id衝突.

我覺得,單純從更換資料庫驅動的角度來說,新版本的驅動不會造成這個問題.它的公升級只能說功能的增強,不應該會出現連增刪改查都完成不了! 如果說資料庫版本不一致的話,只會出現你呼叫了新版本特性的特定功能而資料庫不支援所返回的異常,更不應該是這個異常了.

經過仔細分析,我們的程式為了保證程式可以支援不同的資料而沒有使用到資料庫的特殊特定功能,比如oracle的sequence或者postgresql的serial等.而且程式使用了proxool連線池.

所以,我覺得,問題出現在伺服器的快取機制,即我們打破伺服器快取機制的平衡.舉例說,使用者a剛新插入一條記錄,連線池會快取其資料庫鏈結存入池中備用,而且我覺得伺服器還會快取乙個最大值的數值(這個是**裡的),當再有人想插入的時候,它會直接從池中重用這個鏈結然後中拿到這個最大值,如果鏈結失效或者數值不是最新的它才會重新建立鏈結,或者再重用鏈結來更新快取.

而現在的問題時,他重用的時候拿到的這個最大值不是最新的,所以才會造成伺服器日誌裡丟擲的主鍵衝突異常.而實際上,它又隱性的執行了重新獲取最大值的請求而完成了插入工作,也就是它實際上是成功了,但是一堆的日誌報錯以及頁面的反應延遲還是讓人很鬱悶.

因此,在我們徹底清空伺服器快取,包括tomcat的快取,以及proxy等的快取再重新測試時,一切都又正常了.

後來問題的反覆還是因為管理員在重新部署新版本的時候,忘記清理快取而導致的.

因此更換使用最新jdbc驅動的時候,一定要記得清理伺服器的快取(如果使用和資料庫版本一致的驅動則一般來說不用做這些工作).否則,在盲目打亂它的快取機制後,它只會給你許多意想不到的異常.

僅對必要而且必須更換和公升級jdbc驅動時推薦的做法,一般而言,還是使用和資料庫版本一致的驅動,免去諸多麻煩.

對很多地方理解的不是很深刻,小記一下,自娛自樂.

關於工作的一些碎碎念

技術上已經很久沒提公升了,最近實在比較忙,也學到了很多技術之外的東西。以下內容不斷更新修改 1 不與上級討論技術細節,只反饋什麼時候做,需要多久。2 不隨便提問題,問問題之前理清思路,目的性要明確。3 與部門外的同事,比較重要事項的交流一定要使用郵件,避免表達不準確,也是乙個記錄,雙方都可以隨時查閱...

關於Qt的一些碎碎念

1,qt的除錯真不好用啊!執行慢不說,檢視堆疊經常只能看到幾個很底層的函式,看不到自己 對於分析 毫無鳥用啊!太雞肋了!或許是我使用的方式不對吧!但是換vs就能定位到 2,除了除錯功能,qtcreator寫qt 比vs舒服很多!雖然vs 小番茄提高了很大的便利性 但是識別qt的類還是不靠譜,時不時就...

一些碎碎念

一般分兩步,第一步,一般會在middleware 中統一進行,會和登陸耦合在一起 具體是使用者首先通過使用者名稱密碼證明自己的身份,然後獲得token 一類的儲存在cookie 裡的東西,然後使用者後面訪問時把這個東西放在請求中 這裡會有乙個問題,比如使用者剛開始是某個組的成員,但是之後被踢出組,有...