日期:2013-11-21  浏览次数:20578 次


Linux/Unix下ODBC的安装、配置与编程

齐亮 (cavendish@eyou.com)
2002 年 7 月


本文次要内容是引见ODBC的简单原理,以及如何在Linux/Unix下进行ODBC的安装、配置与编程。

一、 ODBC原理

ODBC 是Open Database Connect 即开放数据库互连的简称,它是由Microsoft 公司于1991 年提出的一个用于访问数据库的统一界面标准,是使用程序和数据库系统之间的两头件。它通过使用相应使用平台上和所需数据库对应的驱动程序与使用程序的交互来实现对数据库的操作,避免了在使用程序中直接调用与数据库相关的操作,从而提供了数据库的独立性。

ODBC 次要由驱动程序和驱动程序管理器组成。驱动程序是一个用以支持ODBC 函数调用的模块,每个驱动程序对应于相应的数据库,当使用程序从基于一个数据库系统移植到另一个时,只需更改使用程序中由ODBC 管理程序设定的与相应数据库系统对应的别名即可。驱动程序管理器可链接到所有ODBC 使用程序中,它担任管理使用程序中ODBC 函数与DLL 中函数的绑定。

ODBC 使用层次的方法来管理数据库,在数据库通信结构的每一层,对可能出现依赖数据库产品本身特性的地方,ODBC 都引入一个公共接口以处理潜在的不分歧性,从而很好地处理了基于数据库系统使用程序的绝对独立性,这也是ODBC 一经推出就获得巨大成功的重要缘由之一。

从结构上分,ODBC 分为单束式和多束式两类。
单束式驱动程序
单束式驱动程序介于使用程序和数据库之间,像中介驱动程序一样数据提供一个统一的数据访问方式。
当用户进行数据库操作时,使用程序传递一个ODBC 函数调用给ODBC 驱动程序管理器,由ODBC API 判断该调用是由它直接处理并将结果前往还是送交驱动程序执行并将结果前往。
由上可见,单束式驱动程序本身是一个数据库引擎,由它直接可完成对数据库的操作,虽然该数据库可能位于网络的任何地方。 多束式驱动程序
多束式驱动程序担任在数据库引擎和客户使用程序之间传送命令和数据,它本身并不执行数据处理操作而用于近程操作的网络通信协议的一个界面。
前端使用程序提出对数据库处理的请求,该请求转给ODBC 驱动程序管理器,驱动程序管理器依据请求的情况,就地完成或传给多束驱动程序,多束式驱动程序将请求翻译为特定厂家的数据库通信接口(如Oracle 的SQLNet)所能理解的方式并交于接口去处理,接口把请求经网络传送给服务器上的数据引擎,服务器处理完后把结果发回给数据库通信接口,数据库接口将结果传给多束式ODBC 驱动程序,再由驱动程序将结果传给使用程序。
很多程序员曾经体会到了在Windows平台下的ODBC的好处,而在Linux/Unix下进行数据库编程的时候却不得不依据不同的数据库来选择特有的API进行编程,一旦数据库发生了改变,所有与这些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 ./configure --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 for i386(安装包及源码包)
(ftp://speakeasy.rpmfind.net/linux/redhat/7.3/en/os/i386/RedHat/RPMS/unixODBC-2.2.0-5.i386.rpm、ftp://ftp.rpmfind.net/linux/redhat/7.3/en/os/i386/SRPMS/unixODBC-2.2.0-5.src.rpm)
unixODBC-devel-2.2.0-5 RPM for i386
(ftp://speakeasy.rpmfind.net/linux/redhat/7.3/en/os/i386/RedHat/RPMS/unixODBC-devel-2.2.0-5.i386.rpm)
直接将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主窗口


和Windows下的ODBC设置窗口是不是很像?我想大家都能看懂吧。

第一步:安装数据库的ODBC驱动程序
Drivers这一栏中用来设置数据库的驱动程序,点击Add按钮,会出现下图:


图二:ODBCConfig Driver Properties窗口


Name一栏填入数据库驱动的名称,Description是数据库驱动的描述,Driver是用来选择数据库驱动程序的,Setup是用来选择数据库驱动安装程序的,如果你是按照上述安装方法安装的,这些程序都放在/usr/lib下,下面是数据库驱动程序的列表:


数据库数据库驱动程序数据库驱动安装程序TXTlibodbctxt.solibodbctxtS.soNNTPlibnn.solibodbcnnS.soMiniSQLlibodbcmini.solibodbcminiS.soPostgreSQLlibodbcpsql.solibodbcpsqlS.soMySQL(注释)libodbcmyS.soSybase/MS SQL(注释)libtdsS.soOracle(注释)liboraodbcS.so
注释:
MySQL、Sybase/MS SQL和Oracle的数据库驱动可以在下列网址找到:
MySQL          http://www.unixodbc.org/myodbc.html
Sybase/MS SQL      http://www.freetds.org
Oracle           http://www.easysoft.org

MySQL的驱动程序MyODBC-2.50.39-4 RPM for i386以及源码包:
ftp://speakeasy.rpmfind.net/linux/redhat/7.3/en/os/i386/RedHat/RPMS/MyODBC-2.50.39-4.i386.rpm
ftp://ftp.redhat.com/pub/redhat/linux/7.3/en/os/i386/SRPMS/MyODBC-2.50.39-4.src.rpm

选择好驱动程序之后,点击"√"保存退出。

第二步:设置DSN
DSN分为User DSN、System DSN和File DSN三种,我们以System DSN为例。选中System DSN一栏当前,点击Add…按钮就会见到下图:


图三:创建DSN选择数据库驱动


列表中会列出你曾经安装好的数据库驱动程序,我这里只装了MySQL和PostgreSQL,然后选择你所要使用的驱动程序,然后点击OK就会出现下图:


图四:DSN的设置


我这里使用的是MySQL的数据库驱动,不同的数据库,这个窗口的内容会有所不同。Name是数据源的名称,Descr