qt连接oracle数据库
由与qt开源版本没有提供oracle数据库驱动,需要自己根据源代码来手动编译oracle驱动。
经过近三天的折腾,终于成功编译oracle驱动,连接到数据库
ps:期间经过各种失败疼苦迷茫。现在终于完成,心情也开阔些。程序员强迫症的疼苦。闲言少叙。接下来将一步一步,描述我的实现过程
一、工具准备
1、qt-opensource-windows-x86-msvc2015_64-5.8.0.exe这个是我是用的qtSDK及里面包含的atcreator
2、在安装的过程中切记把 src选项勾上,默认是不选的。
3、ORA+11+G+R2+server+64bit+for+windows.iso这是我使用的oracle数据库
二、编译生成oracle驱动
1、使用qtcreate打开下面目录的项目C:\Qt\Qt5.8.0\5.8\Src\qtbase\src\plugins\sqldrivers\oci每个人安装路径可能不一样,可根据自己的情况相应更改
需要强调的是在安装qt-opensource-windows-x86-msvc2015_64-5.8.0.exe需要勾选src选项。才能有相应的src目录

打开后直接执行qmake。发现如上面出现的错误。这个问题曾纠结了我一天多。最终在某国外网站找到了解决方法(曾一度想放弃了)
解决方法:打开oci.pro文件

如花圈里面所示。把原来上面那句去掉,添加下面那句即QMAKE_LFLAGS += oci.lib
在右击qmake项目发现成功
2、右击构建项目

出现以上问题。这是需要include Oracle相关的头文件
打开工程文件添加
INCLUDEPATH += D:\app\Administrator\product\11.2.0\dbhome_1\OCI\include

注意相应的目录根据你自己oracle安装目录而定,但是目录后半部分都是一样的如\product\11.2.0\dbhome_1\OCI\include
这样就把相关的头文件包进该工程里了
接着构建项目,发现如下错误

解决方法:上面只抱进的相应的头文件,还应该把相关的lib文件包含进来
打开工程文件,添加:LIBS += D:\app\Administrator\product\11.2.0\dbhome_1\OCI\lib\MSVC\oci.lib,如下图
如果仍然找不到oci.lib可以使用这种添加形式:LIBPATH += D:\app\Administrator\product\11.2.0\dbhome_1\OCI\lib\MSVC

清除项目 ->执行qmake->重新构建

没有错误出现了,仅仅是几个类型转换的警告。
表明已经生成成功。oracle相关驱动一生成成功
打开文件C:\plugins\sqldrivers

果然已经生成相应的dll lib驱动文件。
三、使用驱动连接数据库
把上面目录显得qsqloci.dll(release版本)、qsqlocid.dll(debug版本)文件考到目录
C:\Qt\Qt5.8.0\5.8\msvc2015_64\plugins\sqldrivers
ps:目录根据具体安装而定,但后面部分都是一样的,别考错了

四、qt编写代码连接oracle数据库
注意在连接数据库的项目文件里添加QT += sql
static bool createConnection()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QOCI");//QOCI
db.setPort(1521);
db.setHostName("127.0.0.1");
db.setDatabaseName("orcl");
db.setUserName("test");
db.setPassword("456123");
if (!db.open()) {
QMessageBox::critical(0, "Cannot open database",
"Unable to establish a database connection.", QMessageBox::Cancel);
return false;
}
else{
QMessageBox::critical(0,"congratulation!","oracle database connnect successfuly!!!",QMessageBox::Ok);
return true;
}
}
运行结果如下:

说明数据库已连接成功!!!
现贴出整个数据库连接头文件

有什么问题可以及时联系我
qt连接oracle数据库的更多相关文章
- java连接Oracle数据库
Oracle数据库先创建一个表和添加一些数据 1.先在Oracle数据库中创建一个student表: create table student ( id ) not null primary key, ...
- 记录排查解决Hubble.Net连接Oracle数据库建立镜像库数据丢失的问题
起因 前几天在弄Hubble连接Oracle数据库,然后在mongodb中建立一个镜像数据库; 发现一个问题,原本数据是11W,但是镜像库中只有6w多条; 刚开始以为是没运行好,又rebuild了一下 ...
- NodeJs连接Oracle数据库
nodejs连接oracle数据库,各个平台的官方详情文档:https://github.com/oracle/node-oracledb/blob/master/INSTALL.md 我的nodej ...
- jdbc连接oracle数据库
/*** 通过改变配置文件来连接不同数据库*/package com.xykj.jdbc; import static org.junit.Assert.*; import java.io.Input ...
- 用VS连接oracle数据库时ORA-12504错误
在用VS2008连接oracle数据库时,可能会出现: ORA-12504: TNS: 监听程序在 CONNECT_DATA 中未获得 SERVICE_NAME 只需在web.config文件Data ...
- ASP.NET连接Oracle数据库的步骤详解(转)
ASP.NET连接Oracle数据库的步骤详解 本文我们主要介绍了ASP.NET连接Oracle数据库的步骤及每个步骤需要进行的设置,希望能够对您有所帮助. 在用ASP.NET开发应用程序时, ...
- 64 位win 7或windows 8下的visual studio不能连接Oracle数据库调试网站的问题
在64 位win 7或windows 8系统下,visual studio直接F5运行网站调试,你会发现不能连接Oracle数据库,会报一个“ORA-06413: Connection not ope ...
- [原创]安装Oracle 11gR2,以及如何在win8下使用plsql develper连接Oracle数据库 ,在这里和大家分享下
一,关于win8下安装Oracle 11gR2 1.我下载的是Oracle_11gR2_win64.其中有两个包: 注意:在解压了之后将:win64_11gR2_database_2of2\datab ...
- 用Navicat连接Oracle数据库时报错ORA-28547:connection to server failed,probable Oracle Net admin error
用Navicat连接Oracle数据库时出现如下错误 上网一查原来是oci.dll版本不对.因为Navicat是通过Oracle客户端连接Oracle服务器的,Oracle的客户端分为两种,一种是标准 ...
随机推荐
- lua字符串处理(string库用法)
原文地址http://www.freecls.com/a/2712/f lua的string库是用来处理字符串的,基础函数如下 string.byte(s [, i [, j]]) string.by ...
- python中dir,__dict__ , __setitem__(),__getitem__()
class Testa: pass class Testb(object): pass if __name__ == '__main__': print 'testb = ',dir(Testb) p ...
- osg qt ifc
ui_ifcproject_20190702.h #pragma once /************************************************************* ...
- 26 Flutter仿京东商城项目 购物车之 event_bus事件广播 事件监听
event_bus 介绍 在前面的课程我们给大家讲过状态管理 Provider 的使用. 通俗的讲状态管理就是:当我们想在多个页面(组件/Widget)之间共享状态(数据),或 者一个页面(组件/Wi ...
- 0.9.0.RELEASE版本的spring cloud alibaba nacos+feign实例
这里的feign依然是原来的feign,只不过将注册中心由eureka换成了nacos.服务提供方参见0.9.0.RELEASE版本的spring cloud alibaba nacos实例,消费方跟 ...
- 阶段5 3.微服务项目【学成在线】_day09 课程预览 Eureka Feign_01-Eureka注册中心-Eureka介绍
1 Eureka注册中心 1.1 需求分析 在前后端分离架构中,服务层被拆分成了很多的微服务,微服务的信息如何管理?Spring Cloud中提供服务注册中 心来管理微服务信息. 为什么 要用注册中心 ...
- 学习 TTreeView [15] - 连接数据库 (作为给 "丁永其" 和 "DELPHI万岁" 两位朋友的回复)
本例效果图: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Contro ...
- [简短问答]LODOP如何查看用LODOP打印设计的代码
该博文为图文简短问答,具体详细介绍可查看本博客的相关博文,生成JS代码相关详细博文:Lodop打印设计(PRINT_DESIGN)介绍.Lodop打印设计.维护.预览.直接打印简单介绍.Lodop打印 ...
- 【Leetcode_easy】804. Unique Morse Code Words
problem 804. Unique Morse Code Words solution1: class Solution { public: int uniqueMorseRepresentati ...
- rabbitMQ tipic 模式
RabbitMQ消息队列(八)-通过Topic主题模式分发消息(.Net Core版) 前两章我们讲了RabbitMQ的direct模式和fanout模式,本章介绍topic主题模式的应用.如果对di ...