因为版权问题,Qt本身不自带Oracle数据库的驱动,因此如果想要借用Qt操作Oracle数据库,需要手动进行编译。
使用Qt编译支持oracle的驱动库
编译的前期准备是:源码 + Oracle客户端
步骤如下:
-
打开oci文件夹(目录参考C:\Qt\Qt5.5.1\5.5\Src\qtbase\src\plugins\sqldrivers\oci,具体的目录根据自己的Qt安装路径决定)
-
打开oci工程,并且在oci工程中添加如下图所示的两行代码(第一行是Oracle数据的include的路径,第二行是Oracle数据库的.lib文件的路径),这个路径也需要根据实际的安装路径来设置
-
qmake,然后重新构建项目
-
将生成的.dll文件添加到Qt的driver中(路径可能不同,可以使用everything来进行文件查找)
编译Oracle数据库驱动参考链接1
编译Oracle数据库驱动参考链接2
Qt使用Oracle数据库注意点
对于一般的数据库,即便是像access这样比较特殊的数据库,都可以通过单独设置主机名、端口、数据库名称的方式连接,但是对于Oracle数据库却不是这样。
因为oracle 12c 使用多个插拔数据库,不能采用传统的设置端口、主机名称、数据库名称的方式连接oracle,直接通过设置数据库名称为:hostname:port/pdb_name的方式访问,即:主机地址:端口/pdb数据库名称方式访问oracle数据库。
如果按照普通的数据库的方式去设置Oracle,那么会报如下的错误:
ORA-12505, TNS:listener does not currently know of SID
对于Qt而言正确使用Oracle的方式是:hostname:port/dbName,如下
db.setDatabaseName("127.0.0.1:1521/dbName");
具体的使用差别如下图所示: