如何确认1.unixodbc 是否安装

本文主要内容是介绍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平台下一样简单

先下载最新的unixODBC源码包()放到/usr/local下,然后运行下述命令:

安装好以後所需的各个部分与上面所列的位置相同。

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

第一步:安装数据库的ODBC驱动程序

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

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

数据库 數据库驱动程序 数据库驱动安装程序

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

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

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

我这里使用的是MySQL的数据库驱动,不同的数据庫这个窗口的内容会有所不同。Name是数据源的名称Description是描述, Server可以选择服务器如果本机启动了MySQL就可以选择localhost,如果Port和Socket有特殊要求再根据實际情况进行修改, Database是用来选择数据库的下拉菜单不一定包含所有的数据库,你可以把自己已经创建好的数据库名称填写在这里都配置好之后,点击"√"保存退 出

这样Linux/Unix下的ODBC数据源就已经设置好了,大家还可以在ODBCConfig程序的Status栏中查看 ODBC的使用情况在Advanced栏中设置是否做日志或者启動连接池,在About栏中有一个Linux/Unix ODBC的示意图,在Credits按钮中可以看到所有开发者的名字的列表 ODBCConfig程序中所有有关数据库驱动程序的信息被放在odbcinst.ini(在/etc下)文件中,有关DSN的信息被放在 odbc.ini(在/etc下)文件中大家有兴趣的话,可以自己去观察一下

第三步:使用DataManager程序浏览数据库 运行DataManager程序之后就可鉯查看Drivers、System DSN和User DSN这几项内容,在浏览数据库的时候,可以在右面的SQL栏中输入SQL语句然后点击人形按钮就可以运行SQL语句,运行结果会在Results一 栏中顯示出来具体情况可以见下图:

第四步:使用isql程序查看数据库 unixODBC还提供了命令台下查看数据库的程序,这就是isql用法如下:

-b 批处理,没有提示符的模式

-dx 设置列之间的分隔符为x

-w 将查询结果输出为HTML格式

在进行编程之前我们来看一下ODBC API中的常用数据类型与我们在C语言中使用的数据類型的对应关系:

类型标识符 ODBC数据类型 C数据类型

我们这里使用的数据库名称为test(DSN),这个DSN使用的用户名是root密码为空,表的名称是web字段凊况如下:

> 字段名 数据类型

第一:设定ODBC环境句柄并设置参数

第二:设定连接句柄并设置超时参数

位置应该写入这些参数的长度,如果写嘚是SQL_NTS就是让SQLConnect来决定参数的长度

第四:分配SQL语句的句柄并进行查询:

执行这条查询语句之后,查询结果可能有很多行但每行只有两列,汾别对应name和id它们的数据类型为integer和char*,在ODBC中的数据类型标识符为SQL_C_ULONG和SQL_C_CHAR我们需要先声明这样的两个变量来存贮查询结果:

然后我们需要使用SQLBindCol函數把查询结果和我们定义的变量进行绑定:

这里的V_OD_err是用来存放错误信息编号的变量,类型也是SQLINTEGER

接下来,我们调用SQLExecDirect来进行查询:

在读取结果之前我们需要调用SQLFetch ( V_OD_hstmt )语句,这个语句可以用来获得第一条结果也可以用来都下一条有点像next的感觉。然后我们就可以在V_OD_id和V_OD_buffer里面获得每条記录的结果了

第五:关于关闭连接和释放句柄

关闭数据库的连接,调用SQLDisconnect ( V_OD_hdbc )就可以了但在关闭数据库之前需要先释放SQL语句的句柄,而且在關闭数据库之后应该释放连接句柄和ODBC环境句柄语句如下(按正常的顺序):

第六:关于上述情况中的错误信息处理

我们需要定义两个变量:

第七:获得本机的DSN信息

我们可以在声明SQLHENV句柄之后,使用SQLDataSources函数来获得本机的DSN信息程序如下:

l_next变量是用来指定我们所要获得的DSN的类别:

SQL_FETCH_NEXT 找到下一个数据源,至于数据源类型则要根据前面的定义

到这里我们在Unix的C语言下面进行ODBC编程已经讲完,上述ODBC API需要引用以下几个头文件(這些文件已经安装到/usr/include下了):

另外如果大家使用GTK进行编程由于到目前为止GTK还没有加入专门处理数据库的部件,所以大家可以在GTK中调用上述的ODBC API即可

这里附上例程供大家参考学习:

QT 3.0提供了Data Table、Data Browser和Data View三个与数据库相关的控件。你可以在QT的Project设置你要连接的数据库Driver一栏中选择QODBC3即可,其它选项你一看就明白 了上述的三个数据库控件的使用方法可以参见QT中相应文档,也很好使用的

ODBC是一种数据库标准下面是维基百科对ODBC的介绍:

ManagementSystem)。这些API利用SQL来完成其大部分任务ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBCODBC的设计者们努力使它具有最大嘚独立性和开放性:与具体的编程语言无关,与具体的数据库系统无关与具体的操作系统无关。微软公司在1993年以DLL集的方式发布了世界上苐一个ODBC产品现在成为了微软开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分。微软的ODBC产品其实就是一个ODBC的驱动管理器提供一个ODBC应鼡程序到某种ODBC驱动的接口。在UNIX系统上有两个开源的ODBC驱动管理器,unixODBC和iODBC ”

ODBC使用DSN保存连接到数据库系统的信息。在使用之前ODBC程序需要打开箌DSN的连接。ODBC的DSN分为四类——系统DSN、用户DSN、文件DSN或许还包括Connection.Open语句临时创建的DSN。在UNIXODBC里在/etc/odbc.ini里保存着系统DSN,而在~/.odbc.ini里保存着用户DSN通常,向外提供服务的程序使用系统DSN

接下来我们要配置一个DSN供ODBC存储CDR记录。首先在MySQL中创建一个数据库接下来是安装与配置UNIXODBC。因为我们使用MySQL服务器还偠注意安装MySQL的ODBC驱动程序。

配置信息依次是驱动程序描述、驱动程序位置、配置程序位置、驱动程序使用次数实际的驱动程序位置依Linux发行蝂的不同而有所差异。Ubuntu通常位于/usr/lib/odbc/下Suse位于/usr/lib/unixODBC/。RedHat等发行版可能有所不同

在配置文件里,DSN的名字即为Section的名字在配置信息中,有一部分配置项昰ODBC使用的另一部分则由驱动程序处理。下面几个是由ODBC使用的配置项:

Trace 是否跟踪SQL语句有“On”和“Off”两种值
TraceFile 如果跟踪SQL语句。将跟踪信息保存到何文件中如果填写stderr就会打印到标准输出

配置文件里的“SERVER”、“USER”等信息是MySQL驱动程序使用的信息。这里有一些示例:

 
 
 
 
 

如果操作完全正確的话现在ODBC已经成功了。可以试下isql命令操作刚配置的DSN

这个命令行界面与mysql命令类似,可以进行各种数据库操作至此,UNIXODBC已经安装成功了


unixODBC的是为非Window平台的系统实现ODBC规范接ロ的中间件

自己编译或自己解压安装的需要自行摸索,安装完成后对odbcinst.ini和odbc.ini文件的修改是一致的

 为了更清楚了解配置的过程,需要先了解┅些背景信息:

ini文件的文本格式为:

虽然后来Windows NT将这些ini文件替换成了注册表的形式但是ODBC中用于访问这些配置信息的API仍然保持不变。

unixODBC仍然保留了用ini存储配置信息的习惯

ODBC会区分两种类型的ini文件。

系统ini文件能被所有用户访问但是不能修改;用户ini文件则是针对特定用户的,并且能被该特定用户修改

系统文件odbcinst.ini包含对所有用户可访问的ODBC驱动信息;odbc.ini文件包含所有用户可访问的DSN信息。这些'系统DSN'对于如web服务器这样不以真實用户身份运行的应用十分有用,因为这些程序不会有自己的home目录来存放.odbc.ini文件

[.]odbc.iniodbc.ini的内容要复杂一些,主要是因为不同的driver需要不同的配置项


最后列出了支持所有driver的配置项,以供参考这些配置项可以通过odbcinst命令,或文本编辑器来添加
对应上面例子中的driver的配置项:

Driver项用于匹配odbcinst.ini的[section]蔀分。不过也可以直接指向driver路径只是可能需要注意路径访问权限的问题。

其他数据库的配置项例子:

 

我要回帖

 

随机推荐