近日闲暇时研究了一下linux下的开源项目unixodbc,使用起来很是方便。现在总结一下,以飨读者。
关于ODBC的介绍,在网上找了一段比较经典的解释:ODBC 是Open Database Connect 即开放数据库互连的简称,它是由Microsoft 公司于1991 年提出的一个用于访问数据库的统一界面标准,是应用程序和数据库系统之间的中间件。它通过使用相应应用平台上和所需数据库对应的驱动程序与应用程序的交互来实现对数据库的操作,避免了在应用程序中直接调用与数据库相关的操作,从而提供了数据库的独立性。
ODBC 主要由驱动程序和驱动程序管理器组成。驱动程序是一个用以支持ODBC 函数调用的模块,每个驱动程序对应于相应的数据库,当应用程序从基于一个数据库系统移植到另一个时,只需更改应用程序中由ODBC 管理程序设定的与相应数据库系统对应的别名即可。驱动程序管理器可链接到所有ODBC 应用程序中,它负责管理应用程序中ODBC 函数与DLL 中函数的绑定。
ODBC 使用层次的方法来管理数据库,在数据库通信结构的每一层,对可能出现依赖数据库产品自身特性的地方,ODBC 都引入一个公共接口以解决潜在的不一致性,从而很好地解决了基于数据库系统应用程序的相对独立性,这也是ODBC 一经推出就获得巨大成功的重要原因之一。
unix下著名的ODBC项目有unixodbc和iodbc,其中iodbc最近有所更新,但是笔者尝试安装没有成功。而且在Google上搜索这两个关键字,unixodbc远高于iodbc,所以笔者肤浅的认为unixodbc要比iodbc更加受欢迎。
unixodbc的官方网站是http://www.unixodbc.org/,目前最新的版本是2.2.14, 地址是:http://www.unixodbc.org/unixODBC-2.2.14.tar.gz。
安装步骤:
tar zxvf unixODBC-2.2.14.tar.gz
cd unixODBC-2.2.14
./configure --prefix=/usr/local/unixODBC-2.2.14 --includedir=/usr/include --libdir=/usr/lib -bindir=/usr/bin --sysconfdir=/etc
make
make install
这时,unixodbc已经安装完毕,这时候可以使用odbc的通用api进行编程了。
但是如果要操作具体的数据库,还需要相应数据库提供的odbc驱动,比如操作mysql的ODBC驱动,下载地址是:http://dev.mysql.com/downloads/connector/odbc/5.1.html。
安装步骤:
tar zxvf mysql-5.1.38-linux-i686-icc-glibc23.tar.gz
cd mysql-connector-odbc-5.1.5-linux-x86-32bit
cp lib/* /usr/lib //把该目录下所有的文件拷贝到系统库目录下
./bin/ myodbc-installer //会显示怎么建立数据源
根据提示建立数据源,会在/etc/下产生两个文件odbc.ini odbcinst.ini,
其中 odbc.ini内容如下:
[test]
Driver = /usr/lib/libmyodbc5.so
SERVER = localhost
UID = root
PWD = root
DATABASE = mysql
PORT = 3306
odbcinst.ini内容如下:
[MySQL ODBC 5.1 Driver]
Driver = /usr/lib/myodbc5.so
SETUP = /usr/lib/myodbc3S.so
UsageCount = 1
到此,数据源就建立了,通过下面的cppodbc封装类,就可以对mysql数据库进行操作了。
//.h
// CppMysql - A C++ wrapper around the odbc interface library.
//
// Copyright (c) 2009 Rob Groves. All Rights Reserved. lizp.net@gmail.com
//
// Permission to use, copy, modify, and distribute this software and its
// documentation for any purpose, without fee, and without a written
// agreement, is hereby granted, provided that the above copyright notice,
// this paragraph and the following two paragraphs appear in all copies,
// modifications, and distributions.
//
// IN NO EVENT SHALL THE AUTHOR BE LIABLE TO ANY PARTY FOR DIRECT,
// INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST
// PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION,
// EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// THE AUTHOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
// PARTICULAR PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF
// ANY, PROVIDED HEREUNDER IS PROVIDED "AS IS". THE AUTHOR HAS NO OBLIGATION