天天看點

qt連接配接oracle資料庫經驗總結

利用qt連接配接oracle資料庫實戰經驗:

之前公司用qt開發的産品中,使用的資料庫為mysql和sql server,并未用qt連接配接過

oracle資料庫。是以,隻能通過百度查資料的方式解決問題。

注意:使用qt連接配接oracle資料庫(即使遠端連接配接),必須在本地安裝oracle用戶端。

開發工具:QT5.4.0(32位), Oracle 11g(64位)

1、由于之前對這塊一點不懂,是以,直接寫了個oracle資料庫連接配接的函數,嘗試連接配接服務

器上的一個資料庫,結果提示錯誤:Driver not loaded Driver not loaded。直接翻譯

,顧名思義,未加載驅動。上網查閱資料,原來qt沒有提供現成的oracle資料庫驅動,需

要自行編譯驅動動态庫,于是乎,找到了編譯的步驟,其實如果安裝qt的時候已經勾選了對

源碼的安裝,那就直接到相應目錄下(比如我安裝的是QT5.4.0,那麼我的oci驅動源碼就

路徑為D:\Qt\Qt5.4.0\5.4\Src\qtbase\src\plugins\sqldrivers\oci)找到工程檔案,

按照教程中的步驟,分别增加了INCLUDE參數以及LIBS參數,編譯後報錯:undefined 

reference to一大堆函數,大概意思是在lib中沒有找到相應的函數實作。于是,我使用vs

提供的開發者視窗執行dumpbin指令,發現其實這些函數實作都是有的。也就是說,有可能

是版本不比對,上網一搜,果不其然,32位的qt不能編譯64位的oracle,于是隻能放棄。

投機取巧,網上下載下傳了别人已經編譯好了的qsqloci.dll以及qsqlocid.dll,丢到程式同

級目錄sqldrivers檔案夾中(這裡也可以是D:\Qt\Qt5.4.0\5.4\mingw491_32\plugins

\sqldrivers中)。自此,解決了缺少oracle驅動的問題。

2、再次嘗試運作測試程式進行資料庫連接配接,仍然報錯,但是錯誤提示變成了“ORA-12505: 

TNS: 監聽程式目前無法識别連接配接描述符中所給出的 SID”。SID是個什麼東東?問了下同

公司别的搞oracle資料庫的人,竟然跟我說他們沒用過,好吧,自己上網查資料。。。。

。各說紛纭,有的說是沒設定監聽,有的說是listener.ora和tnsnames.ora檔案不比對造

成的。其實後來想想,是我在測試程式中為setdaname的時候,資料庫名傳遞錯了,資料庫

名其實應該傳遞為你所要連接配接資料庫的全局資料庫名。如果你不知道這個全局資料庫名,那

麼很好辦,打開net manager,然後點選本地--服務命名,然後下拉清單中選中你想要連接配接

的資料庫,然後在右側,會看到服務辨別,這個服務辨別就是SID,即你需要為setdbname傳

遞的參數。

由于我當時不知道,是以,又饒了很大的彎路,是以一些基本的oracle資料庫知識是如果

掌握了,會對問題解決帶來很大的友善。

3、由于對oracle基本知識知道的太少,我選擇重裝oracle資料庫,并且在本地建立一個

oracle資料庫進行連接配接。先解除安裝了之前的oracle,然後又重裝(雖然過程比較慢,但是,自

己親自弄一遍還是非常必要的,因為這會加深你對oracle一些配置的印象)。建立資料庫

的過程中,在進行oracle database configuration 的過程中出錯,需要修改C:

\Windows\System32\drivers\etc Hosts檔案夾中,被屏蔽掉的127.0.0.1。

然後,本地資料庫建立成功(記下SDI,一般預設都寫orcl)。

4、測試一下本地的網絡服務名吧,打開oracle database configuration(開始->oracle 

11g->oracle database configuration),然後選擇《本地網絡服務名配置->下一步->測

試,然後選擇你要測試的網絡名(我的是ORCL),可能提示測試失敗,這時你可以點選更

改登入,錄入正确的使用者名和密碼(密碼是你在建立資料庫時建立的)。測試成功,說明你

的資料庫可以被正常遠端通路了。

總結來看,使用qt連接配接oracle資料庫,關鍵在于安裝oci驅動,為待通路的服務設定監聽,

并且為資料庫連接配接設定正确的資料庫名、使用者名和密碼,就可以了!