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驱动,为待访问的服务设置监听,


并且为数据库连接设置正确的数据库名、用户名和密码,就可以了!
  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值