收藏 分享(赏)

UNIX下配置ODBC的方法.doc

上传人:jinchen 文档编号:6974784 上传时间:2019-04-29 格式:DOC 页数:11 大小:195KB
下载 相关 举报
UNIX下配置ODBC的方法.doc_第1页
第1页 / 共11页
UNIX下配置ODBC的方法.doc_第2页
第2页 / 共11页
UNIX下配置ODBC的方法.doc_第3页
第3页 / 共11页
UNIX下配置ODBC的方法.doc_第4页
第4页 / 共11页
UNIX下配置ODBC的方法.doc_第5页
第5页 / 共11页
点击查看更多>>
资源描述

1、Linux/Unix 下 ODBC 的安装、配置与编程齐亮 () 2002 年 7 月 本文主要内容是介绍 ODBC 的简单原理,以及如何在 Linux/Unix 下进行 ODBC 的安装、配置与编程。一、 ODBC 原理ODBC 是 Open Database Connect 即开放数据库互连的简称,它是由 Microsoft 公司于1991 年提出的一个用于访问数据库的统一界面标准,是应用程序和数据库系统之间的中间件。它通过使用相应应用平台上和所需数据库对应的驱动程序与应用程序的交互来实现对数据库的操作,避免了在应用程序中直接调用与数据库相关的操作,从而提供了数据库的独立性。ODBC 主要

2、由驱动程序和驱动程序管理器组成。驱动程序是一个用以支持 ODBC 函数调用的模块,每个驱动程序对应于相应的数据库,当应用程序从基于一个数据库系统移植到另一个时,只需更改应用程序中由 ODBC 管理程序设定的与相应数据库系统对应的别名即可。驱动程序管理器可链接到所有 ODBC 应用程序中,它负责管理应用程序中 ODBC 函数与 DLL 中函数的绑定。ODBC 使用层次的方法来管理数据库,在数据库通信结构的每一层,对可能出现依赖数据库产品自身特性的地方,ODBC 都引入一个公共接口以解决潜在的不一致性,从而很好地解决了基于数据库系统应用程序的相对独立性,这也是 ODBC 一经推出就获得巨大成功的重

3、要原因之一。从结构上分,ODBC 分为单束式和多束式两类。1. 单束式驱动程序单束式驱动程序介于应用程序和数据库之间,像中介驱动程序一样数据提供一个统一的数据访问方式。当用户进行数据库操作时,应用程序传递一个 ODBC 函数调用给ODBC 驱动程序管理器,由 ODBC API 判断该调用是由它直接处理并将结果返回还是送交驱动程序执行并将结果返回。由上可见,单束式驱动程序本身是一个数据库引擎,由它直接可完成对数据库的操作,尽管该数据库可能位于网络的任何地方。 2. 多束式驱动程序多束式驱动程序负责在数据库引擎和客户应用程序之间传送命令和数据,它本身并不执行数据处理操作而用于远程操作的网络通信协议

4、的一个界面。前端应用程序提出对数据库处理的请求,该请求转给 ODBC 驱动程序管理器,驱动程序管理器依据请求的情况,就地完成或传给多束驱动程序,多束式驱动程序将请求翻译为特定厂家的数据库通信接口(如 Oracle 的 SQLNet)所能理解的形式并交于接口去处理,接口把请求经网络传送给服务器上的数据引擎,服务器处理完后把结果发回给数据库通信接口,数据库接口将结果传给多束式 ODBC 驱动程序,再由驱动程序将结果传给应用程序。 很多程序员已经体会到了在 Windows 平台下的 ODBC 的益处,而在 Linux/Unix 下进行数据库编程的时候却不得不根据不同的数据库来选择特有的 API 进行

5、编程,一旦数据库发生了改变,所有与这些 API 相关的程序都必须进行修改。其实在 Linux/Unix 下现在也有了自己的ODBC,可以使我们的数据库编程就像在 Windows 平台下一样简单。下面我们开始介绍 Linux/Unix 下的 ODBC:二、 Linux/Unix 下 ODBC 的安装:方法一:先下载最新的 unixODBC 源码包(http:/www.unixodbc.org/unixODBC-2.2.1.tar.gz)放到/usr/local 下,然后运行下述命令:tar zxvf unixODBC-2.2.1.tar.gzcd unixODBC-2.2.1 ./configu

6、re -prefix=/usr/local/unixODBC-2.2.1 -includedir=/usr/include -libdir=/usr/lib -bindir=/usr/bin -sysconfdir=/etcmakemake install安装成功后,unixODBC 所需的头文件都被安装到了/usr/inlucde 下,编译好的库文件安装到了/usr/lib 下,与 unixODBC 相关的可执行文件安装到了/usr/bin 下,配置文件放到了/etc 下。 方法二:下载 rpm 包进行安装,我们这里以 Red Hat 7.3 为例:unixODBC-2.2.0-5 RPM

7、for i386(安装包及源码包)(ftp:/ ftp:/ RPM for i386(ftp:/ unixODBC-2.2.0-5.i386.rpm 和 unixODBC-devel-2.2.0-5.i386.rpm 装入系统就可以了,命令如下:rpm -ivh unixODBC-2.2.0-5.i386.rpmrpm -ivh unixODBC-devel-2.2.0-5.i386.rpm安装好以后,所需的各个部分与上面所列的位置相同。 三、 Linux/Unix 下 ODBC 的配置:运行 ODBCConfig 程序(在/usr/bin 下),如下图:图一:ODBCConfig 主窗口 和

8、 Windows 下的 ODBC 设置窗口是不是很像?我想大家都能看懂吧。第一步:安装数据库的 ODBC 驱动程序Drivers 这一栏中用来设置数据库的驱动程序,点击 Add 按钮,会出现下图:图二:ODBCConfig Driver Properties 窗口 Name 一栏填入数据库驱动的名称,Description 是数据库驱动的描述,Driver 是用来选择数据库驱动程序的,Setup 是用来选择数据库驱动安装程序的,如果你是按照上述安装方法安装的,这些程序都放在/usr/lib 下,下面是数据库驱动程序的列表:数据库 数据库驱动程序 数据库驱动安装程序TXT libodbctxt.

9、so libodbctxtS.soNNTP libnn.so libodbcnnS.soMiniSQL libodbcmini.so libodbcminiS.so注释:MySQL、Sybase/MS SQL 和 Oracle 的数据库驱动可以在下列网址找到:MySQL http:/www.unixodbc.org/myodbc.htmlSybase/MS SQL http:/www.freetds.orgOracle http:/www.easysoft.orgMySQL 的驱动程序 MyODBC-2.50.39-4 RPM for i386 以及源码包:ftp:/ DSNDSN 分为 Us

10、er DSN、System DSN 和 File DSN 三种,我们以 System DSN 为例。选中System DSN 一栏以后,点击 Add按钮就会见到下图:PostgreSQL libodbcpsql.so libodbcpsqlS.soMySQL (注释) libodbcmyS.soSybase/MS SQL (注释) libtdsS.soOracle (注释) liboraodbcS.so图三:创建 DSN 选择数据库驱动列表中会列出你已经安装好的数据库驱动程序,我这里只装了 MySQL 和 PostgreSQL,然后选择你所要使用的驱动程序,然后点击 OK 就会出现下图:图四:

11、DSN 的设置 我这里使用的是 MySQL 的数据库驱动,不同的数据库,这个窗口的内容会有所不同。 Name是数据源的名称,Description 是描述,Server 可以选择服务器,如果本机启动了 MySQL 就可以选择 localhost,如果 Port 和 Socket 有特殊要求,再根据实际情况进行修改,Database 是用来选择数据库的,下拉菜单不一定包含所有的数据库,你可以把自己已经创建好的数据库名称填写在这里。都配置好之后,点击“保存退出。这样 Linux/Unix 下的 ODBC 数据源就已经设置好了,大家还可以在 ODBCConfig 程序的Status 栏中查看 ODB

12、C 的使用情况,在 Advanced 栏中设置是否做日志或者启动连接池,在About 栏中,有一个 Linux/Unix ODBC 的示意图,在 Credits 按钮中可以看到所有开发者的名字的列表。 ODBCConfig 程序中所有有关数据库驱动程序的信息被放在 odbcinst.ini(在/etc 下)文件中,有关 DSN 的信息被放在 odbc.ini(在/etc 下)文件中,大家有兴趣的话,可以自己去观察一下。第三步:使用 DataManager 程序浏览数据库运行 DataManager 程序之后就可以查看 Drivers、System DSN 和 User DSN 这几项内容,在浏

13、览数据库的时候,可以在右面的 SQL 栏中输入 SQL 语句,然后点击人形按钮就可以运行 SQL 语句,运行结果会在 Results 一栏中显示出来,具体情况可以见下图:图五:使用 DataManager 浏览数据库 第四步:使用 isql 程序查看数据库unixODBC 还提供了命令台下查看数据库的程序,这就是 isql,用法如下:isql DSN UID PWD optionsDSN 数据源名称 UID 用户 IDPWD 用户密码 Options:-b 批处理,没有提示符的模式-dx 设置列之间的分隔符为 x-w 将查询结果输出为 HTML 格式-c 第一行输出列名-version 输出i

14、sql 的版本号四、 Linux/Unix 下 ODBC 的编程:1、使用 unixODBC 提供的 ODBC API 进行编程:在进行编程之前,我们来看一下 ODBC API 中的常用数据类型与我们在 C 语言中使用的数据类型的对应关系:类型标识符 ODBC 数据类型 C 数据类型SQL_C_CHAR SQLCHAR * unsigned char *SQL_C_SSHORT SQLSMALLINT short intSQL_C_USHORT SQLUSMALLINT unsigned short intSQL_C_SLONG SQLINTEGER long intSQL_C_FLOAT S

15、QLREAL float我们这里使用的数据库名称为 test(DSN),这个 DSN 使用的用户名是 root,密码为空,表的名称是 web,字段情况如下:第一:设定 ODBC 环境句柄并设置参数首先我们需要声明一个 ODBC 环境句柄(SQLHENV ),它可以用来获得有关的 ODBC 环境信息,我们需要调用 SQLAllocHandle ( SQL_HANDLE_ENV, SQL_NULL_HANDLE, SQL_C_DOUBLE SQLDOUBLE, SQLFLOAT doubleSQL_C_BINARY SQLCHAR * unsigned char *SQL_C_TYPE_DATE

16、SQL_DATE_STRUCTstruct tagDATE_STRUCT SQLSMALLINT year; SQLUSMALLINT month; SQLUSMALLINT day; DATE_STRUCT;SQL_C_TYPE_TIME SQL_TIME_STRUCTstruct tagTIME_STRUCT SQLUSMALLINT hour; SQLUSMALLINT minute; SQLUSMALLINT second; TIME_STRUCT; 字段名 数据类型id integername char(40)size integerchar V_OD_buffer200;然后我们需

17、要使用 SQLBindCol 函数把查询结果和我们定义的变量进行绑定:SQLBindCol(V_OD_hstmt,1,SQL_C_CHAR, SQLBindCol(V_OD_hstmt,2,SQL_C_ULONG,这里的 V_OD_err 是用来存放错误信息编号的变量,类型也是 SQLINTEGER。接下来,我们调用 SQLExecDirect 来进行查询:SQLExecDirect ( V_OD_hstmt, “SELECT dtname,iduser FROM web order by iduser“, SQL_NTS );我们可以用 SQLNumResultCols ( V_OD_hst

18、mt, SQLDisconnect(V_OD_hdbc);SQLFreeHandle(SQL_HANDLE_DBC,V_OD_hdbc);SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);第六:关于上述情况中的错误信息处理我们需要定义两个变量:long V_OD_erg;SQLINTEGER V_OD_err;SQLAllocHandle、SQLSetEnvAttr 、SQLSetConnectAttr、SQLConnect 、SQLExecDirect、SQLNumResultCols 和 SQLRowCount 的调用结果都可以用 V_OD_erg 来存储,V

19、_OD_err 可以获得 SQLBindCol 中的错误信息。 第七:获得本机的 DSN 信息我们可以在声明 SQLHENV 句柄之后,使用 SQLDataSources 函数来获得本机的 DSN 信息。程序如下:void OD_ListDSN(void)char l_dsn100,l_desc100;short int l_len1,l_len2,l_next;l_next=SQL_FETCH_FIRST;while( SQLDataSources(V_OD_Env,l_next,l_dsn, sizeof(l_dsn),l_next=SQL_FETCH_NEXT;l_next 变量是用来指

20、定我们所要获得的 DSN 的类别:到这里,我们在Unix 的 C 语言下面进行 ODBC编程已经讲完,上述 ODBC API需要引用以下几个头文件(这些文件已经安装到/usr/include 下了):#include #include #include 另外如果大家使用 GTK 进行编程,由于到目前为止 GTK 还没有加入专门处理数据库的部件,所以大家可以在 GTK 中调用上述的 ODBC API 即可。这里附上例程供大家参考学习:/* odbc.c testing unixODBC*/#include #include #include #include #include SQLHENV V

21、_OD_Env; / Handle ODBC environmentlong SQL_FETCH_FIRST设定 SQLDataSources()函数找到第一个可用的数据源(可以是 User DSN,也可以是 Systerm DSN)SQL_FETCH_FIRST_USER 设定 SQLDataSources()函数找到第一个 User DSNSQL_FETCH_FIRST_SYSTEM 设定 SQLDataSources()函数找到第一个 System DSNSQL_FETCH_NEXT 找到下一个数据源,至于数据源类型则要根据前面的定义V_OD_erg; / result of funct

22、ionsSQLHDBC V_OD_hdbc; / Handle connectionchar V_OD_stat10; / Status SQLSQLINTEGER V_OD_err,V_OD_rowanz,V_OD_id;SQLSMALLINT V_OD_mlen,V_OD_colanz;char V_OD_msg200,V_OD_buffer200;int main(int argc,char *argv) / 1. allocate Environment handle and register version V_OD_erg=SQLAllocHandle(SQL_HANDLE_ENV

23、,SQL_NULL_HANDLE, if (V_OD_erg != SQL_SUCCESS) exit(0); V_OD_erg=SQLSetEnvAttr(V_OD_Env, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0); if (V_OD_erg != SQL_SUCCESS) SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env); exit(0); / 2. allocate connection handle, set timeout V_OD_erg = SQLAllocHandle(SQL_HANDLE_DB

24、C, V_OD_Env, if (V_OD_erg != SQL_SUCCESS) SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env); exit(0); SQLSetConnectAttr(V_OD_hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER *)5, 0); / 3. Connect to the datasource “web“ V_OD_erg = SQLConnect(V_OD_hdbc, (SQLCHAR*) “Test“, SQL_NTS, (SQLCHAR*) “root“, SQL_NTS, (SQLCHAR*) “,

25、 SQL_NTS); if (V_OD_erg != SQL_SUCCESS) SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc,1, V_OD_stat, printf(“%s (%d)n“,V_OD_msg,V_OD_err); SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env); exit(0); printf(“Connected !n“); V_OD_erg=SQLAllocHandle(SQL_HANDLE_STMT, V_OD_hdbc, if (V_OD_erg != SQL_SUCCESS) SQLGetDiagRec

26、(SQL_HANDLE_DBC, V_OD_hdbc,1, V_OD_stat, printf(“%s (%d)n“,V_OD_msg,V_OD_err); SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env); exit(0); SQLBindCol(V_OD_hstmt,1,SQL_C_CHAR, SQLBindCol(V_OD_hstmt,2,SQL_C_ULONG, V_OD_erg=SQLExecDirect(V_OD_hstmt,“SELECT dtname,iduser FROM web order by iduser“,SQL_NTS); if (V_

27、OD_erg != SQL_SUCCESS) SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc,1, V_OD_stat, printf(“%s (%d)n“,V_OD_msg,V_OD_err); SQLFreeHandle(SQL_HANDLE_STMT,V_OD_hstmt); SQLFreeHandle(SQL_HANDLE_DBC,V_OD_hdbc); SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env); exit(0); V_OD_erg=SQLNumResultCols(V_OD_hstmt, if (V_OD_erg

28、!= SQL_SUCCESS) SQLDisconnect(V_OD_hdbc); SQLFreeHandle(SQL_HANDLE_DBC,V_OD_hdbc); SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env); exit(0); printf(“Number of Columns %dn“,V_OD_colanz); V_OD_erg=SQLRowCount(V_OD_hstmt, if (V_OD_erg != SQL_SUCCESS) SQLFreeHandle(SQL_HANDLE_STMT,V_OD_hstmt); SQLDisconnect(V_O

29、D_hdbc); SQLFreeHandle(SQL_HANDLE_DBC,V_OD_hdbc); SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env); exit(0); printf(“Number of Rows %dn“,V_OD_rowanz); V_OD_erg=SQLFetch(V_OD_hstmt); while(V_OD_erg != SQL_NO_DATA) printf(“Result: %d %sn“,V_OD_id,V_OD_buffer); V_OD_erg=SQLFetch(V_OD_hstmt); ; SQLFreeHandle(SQL

30、_HANDLE_STMT,V_OD_hstmt); SQLDisconnect(V_OD_hdbc); SQLFreeHandle(SQL_HANDLE_DBC,V_OD_hdbc); SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env); return(0);2 QT 下进行 ODBC 编程QT 3.0 提供了 Data Table、Data Browser 和 Data View 三个与数据库相关的控件。你可以在 QT 的 Project 设置你要连接的数据库,Driver 一栏中选择 QODBC3 即可,其它选项你一看就明白了。上述的三个数据库控件的使用方法可以参见 QT 中相应文档,也很好使用的。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报