Qt|ODBC数据源的使用--Qt
前言 数据库这部分不是特别的了解,只懂些皮毛。所以这篇博客不是很专业,有很多我认为的,而未理论求证的观点。
说到连接数据库,我之前一直使用的是,数据库的驱动文件(sql drivers),觉得用什么数据库,要使用对应的数据库驱动,若Qt没自带,则需要自己编译。
然而上述属于连接数据库的方法其一,我现在知道了另一种连接数据库的方法:用数据源ODBC,因为Qt含有这个驱动,我们只需要配置数据源就可以连接到对应的数据库了。但是这种方法也有它的缺点:仅限于此机子,若另外的机子则需要重新配置,不像直接使用对应驱动的方式,可以打包好后,任何机子都适用。
理论 以下是来自百度百科的对ODBC数据源的理论介绍:
ODBC(Open Database Connectivity,开放数据库互连)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。一组数据的位置,可以使用 ODBC驱动程序访问该位置。
一个基于ODBC的应用程序对数据库的操作不依赖任何DBMS(数据管理系统),不直接与DBMS打交道,所有的数据库操作由对应的DBMS的ODBC驱动程序完成。也就是说,不论是FoxPro、Access还是Oracle数据库,均可用ODBC API进行访问。由此可见,ODBC的最大优点是能以统一的方式处理所有的数据库。
一个完整的ODBC由下列几个部件组成:
- 应用程序(Application)。
- ODBC管理器(Administrator)。该程序位于Windows控制面板(Control Panel)的管理工具内,其主要任务是管理安装的ODBC驱动程序和管理数据源。
- 驱动程序管理器(Driver Manager)。驱动程序管理器包含在ODBC32.DLL中,对用户是透明的。其任务是管理ODBC驱动程序,是ODBC中最重要的部件。
- ODBC API。
- ODBC 驱动程序。是一些DLL,提供了ODBC和数据库之间的接口。
- 数据源。数据源包含了数据库位置和数据库类型等信息,实际上是一种数据连接的抽象。
在ODBC中,ODBC API不能直接访问数据库,必须通过驱动程序管理器与数据库交换信息。驱动程序管理器负责将应用程序对ODBC API的调用传递给正确的驱动程序,而驱动程序在执行完相应的操作后,将结果通过驱动程序管理器返回给应用程序
配置数据源 我是在win7 64位环境下,为配置oracle客户端配置数据源。具体操作如下:
安装oracle客户端,具体方法网上有^_^
【Qt|ODBC数据源的使用--Qt】创建监听文件:将路径 client\NetWork\Admin下的文件tnsnames.ora用记事本打开,与服务器创建连接,具体如下(注释位置需要更改的地方):
listenName = #监听名称
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.22)(PORT = 1521)) #IP及端口
)
(CONNECT_DATA =
https://www.it610.com/article/(SERVICE_NAME = orcl)#服务器名称
)
)
配置数据源:打开控制面板-> 管理工具 -> 数据源(ODBC),就可以看到图1的界面,选择 系统DSN,点击添加 ,选择oracle 客户端的驱动,即oracle in OrclClientug_home,选择该驱动程序打开数据源配置,配置对应的信息,如图2(借别人的图).
文章图片
图1
文章图片
图2
注意:我的机子是win7 64位的,而为了能够使用PLSQL则下载使用的是32位的oracle,在这种情形下,直接按上述步骤打开数据源,是看不到oracle的驱动的,因为这个 数据源 是64位的,而我们用的是32位的,32位的打开方式是:手动打开 路径C:\Windows\SysWOW64下的odbcad32.exe,即可看到驱动。
代码
//以下信息要与自己的配置对应
QSqlDatabase db=QSqlDatabase::addDatabase("QODBC");
db.setHostName(hostName);
db.setUserName(userName);
//用户名
db.setPort(port);
db.setPassword(password);
db.setDatabaseName(databaseName);
bool isOpen=db.open();
结束语 就到这里吧,电脑没电了,啊哦
推荐阅读
- 热闹中的孤独
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 一个人的旅行,三亚
- 布丽吉特,人生绝对的赢家
- 慢慢的美丽
- 尽力
- 一个小故事,我的思考。
- 家乡的那条小河
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量