视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
终于编译好了qt的oracle驱动QOCI,连接drivernotloaded解决方法
2020-11-09 07:17:32 责编:小采
文档


我想你和我一样,照着终于编译好了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改了没有。

下载本文
显示全文
专题