天天看點

最近遇到的兩個BUG

最近遇到兩個BUG

第一: 我要用jdbc連接配接客戶的oracle資料庫客戶版本為11g 由于我的測試錯誤我覺得使用的class12這個包版本有點老,好像查不出oracle11g的資料(經證明是我錯了) 是以我換了oracle11g的ojdbc6_g驅動包。

    換包之後連接配接報錯 ora12505 ,plsql工具可以連接配接資料庫但是jdbc不行,于是乎我就上百度找尋答案,查詢了很多網上的文章才發現問題,9i等老版本的驅動包連接配接資料庫使用的是servicename 也就是我們在tnsnames.ora裡配置的服務名。而11g版本的驅動包要求連接配接資料庫要使用sid,爆出的ora12505也就是因為使用的sid不正确導緻的。 有很多人的答案是使用sql語句檢視資料庫中的sid 察看資料庫中目前的sid: 

SQL> select INSTANCE_NAME from v$instance;

INSTANCE_NAME ---------------- has

    這種方法顯然很正确,不過我使用的資料庫使用者沒有檢視此視圖的權限,沒辦法隻能接着找。

    最後在一位高手的貼子裡找到了答案,這位高手給我們講解了servicename和sid的差別,并且根據他豐富的經驗提出,一般資料庫rac叢集 有多個子節點,子節點的sid是servicename+數字,而我使用的oracle rac叢集的服務名就是rac 将sid改為rac1通路第一個子節點,連接配接成功。

第二個: 由于我在項目中使用了smb方式來讀取伺服器的檔案,也就是擷取windows區域網路共享的檔案。在這種方法中使用的通路路徑格式為:smb://username:[email protected]/word_files。

    由于我使用的密碼中含有@字元 導緻通路失敗,于是乎我又上網找尋答案,結果發現這方面的資料較少,有幾位網友寫過smb的教程 也提出使用者名和密碼中不能含有強字元,否則會出錯,但是沒有提出解決方案。 無奈之下隻能搜尋包名jcifs,進如官方網站查找api 找到答案 @要用%40表示。 希望此文章能夠幫助到一些人。