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由下列几个部件组成:

  1. 应用程序(Application)。

  2. ODBC管理器(Administrator)。该程序位于Windows控制面板(Control Panel)的管理工具内,其主要任务是管理安装的ODBC驱动程序和管理数据源。

  3. 驱动程序管理器(Driver Manager)。驱动程序管理器包含在ODBC32.DLL中,对用户是透明的。其任务是管理ODBC驱动程序,是ODBC中最重要的部件。

  4. ODBC API。

  5. ODBC 驱动程序。是一些DLL,提供了ODBC和数据库之间的接口。

  6. 数据源。数据源包含了数据库位置和数据库类型等信息,实际上是一种数据连接的抽象。

应用程序要访问一个数据库,首先必须用ODBC管理器注册一个数据源,管理器根据数据源提供的数据库位置、数据库类型及ODBC驱动程序等信息,建立起ODBC与具体数据库的联系。这样,只要应用程序将数据源名提供给ODBC,ODBC就能建立起与相应数据库的连接。

在ODBC中,ODBC API不能直接访问数据库,必须通过驱动程序管理器与数据库交换信息。驱动程序管理器负责将应用程序对ODBC API的调用传递给正确的驱动程序,而驱动程序在执行完相应的操作后,将结果通过驱动程序管理器返回给应用程序

配置数据源

 我是在win7 64位环境下,为配置oracle客户端配置数据源。具体操作如下:

安装oracle客户端,具体方法网上有^_^

创建监听文件:将路径 client\NetWork\Admin下的文件tnsnames.ora用记事本打开,与服务器创建连接,具体如下(注释位置需要更改的地方):

listenName = #监听名称
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.22)(PORT = 1521)) #IP及端口
    )
    (CONNECT_DATA =
      (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();

 

结束语

 就到这里吧,电脑没电了,啊哦

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值