您好,欢迎访问一九零五行业门户网

终于编译好了qt的oracle驱动QOCI,连接driver not loaded解决方法

我想你和我一样,照着终于编译好了qt的oracle驱动qoci,连接成功!!! 一文编译了qoci,我目前遇到下面错误:(代码我直接用原文的) qsqldatabase: qoci driver not loadedqsqldatabase: available drivers: qsqlite qmysql qmysql3 qodbc qodbc3 qpsql qpsql7e
  我想你和我一样,照着终于编译好了qt的oracle驱动qoci,连接成功!!!
  一文编译了qoci,我目前遇到下面错误:(代码我直接用原文的)
qsqldatabase: qoci driver not loaded qsqldatabase: available drivers: qsqlite qmysql qmysql3 qodbc qodbc3 qpsql qpsql7 error_oracle: "driver not loaded driver not loaded"
解决这个问题就得从原理上说:
thin是纯java实现tcp/ip的c/s通讯;而oci方式,客户端通过native java method调用c library访问服务端,而这个c library就是oci(oracle called interface),因此这个oci总是需要随着oracle客户端安装(从oracle10.1.0开始,单独提供oci instant client,不用再完整的安装client)
很多时候我们都考虑我们编译的$qtdir/plugins/sqldrivers 下dll 是否正确加载,而忽略oracle那边的库是否加载。
那么问题解决方法就是
方法1、在系统path 就是环境变量中添加 你的oracle oci.dll库位置 c:\oracle\product\10.2.0\client_1\bin。如果你正确安装oracle客户端,就不应该存在这个问题。
方法2、有点土就是用qt自带 loadlibrary 自己加载oci.dll库位置。
我用的方法是1+2,已经测试无问题。
qlibrary *hello_lib = null; //写清楚库的路径,如果放在当前工程的目录下,路径为./oracle.so hello_lib = new qlibrary("c:\\oracle\\product\\10.2.0\\client_1\\bin\\oci.dll"); //加载动态库 hello_lib->load(); if (!hello_lib->isloaded()) { printf("load oracle failed!\n"); return ; }
但要注意不管方法1或者方法2,oracle 客户端是必须要装的,另外我不知道qt各版本编译出来的库是否通用,自己编译比较好。
win7 我还遇到一个问题:
qocidriver: unable to create environment error_oracle: " unable to logon"
这个你用pl/sql应该遇到过
 解决方法:
 1、右键用 管理员身份账户 运行
 2、程序路径不能有(),类似c:\program files (x86) 这样的路径无法登陆。我只知道10 是不行,不知道12改了没有。
其它类似信息

推荐信息