赞
踩
数据库这部分不是特别的了解,只懂些皮毛。所以这篇博客不是很专业,有很多我认为的,而未理论求证的观点。
说到连接数据库,我之前一直使用的是,数据库的驱动文件(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驱动程序等信息,建立起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(借别人的图).
注意:我的机子是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();
就到这里吧,电脑没电了,啊哦
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。