织梦CMS - 轻松建站从此开始!

罗索

cppodbc--c++的odbc封装类

jackyhwei 发布于 2011-01-17 17:17 点击:次 
ODBC通过使用相应应用平台上和所需数据库对应的驱动程序与应用程序的交互来实现对数据库的操作,避免了在应用程序中直接调用与数据库相关的操作,从而提供了数据库的独立性。近日闲暇时研究了一下linux下的开源项目unixodbc,使用起来很是方便。现在总结一下,以飨读者
TAG:

近日闲暇时研究了一下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内容如下:

  1. [test] 
  2. Driver   = /usr/lib/libmyodbc5.so 
  3. SERVER   = localhost 
  4. UID      = root 
  5. PWD      = root 
  6. DATABASE = mysql 
  7. PORT     = 3306 

odbcinst.ini内容如下:

  1. [MySQL ODBC 5.1 Driver] 
  2. Driver     = /usr/lib/myodbc5.so 
  3. SETUP      = /usr/lib/myodbc3S.so 
  4. UsageCount = 1 

到此,数据源就建立了,通过下面的cppodbc封装类,就可以对mysql数据库进行操作了。

头文件

  1. // CppMysql - A C++ wrapper around the odbc interface library. 
  2. // if u use it, u should show the source 
  3. // from http://blog.csdn.net/bat603/archive/2009/10/19/4699251.aspx 
  4. // by ben 
  5. // if u find some questions, please tell me with email 
  6. // lizp.net@gmail.com 
  7. // 
  8. // V1.1               20/09/2009      -Initial Version for cppodbc 
  9. #ifndef _CPP_ODBC_H_ 
  10. #define _CPP_ODBC_H_ 
  11. #include <stdlib.h> 
  12. #include <stdio.h> 
  13. #include <pthread.h> 
  14. #include <sql.h> 
  15. #include <sqlext.h> 
  16. #include <sqltypes.h> 
  17.  
  18. //查询的最大字段数量 
  19. #define FIELD_NUM 1024 
  20. class CppODBC 
  21. public
  22.          CppODBC( ); 
  23.          virtual ~CppODBC( ); 
  24.          //公共接口 
  25. public
  26.          bool Open( ); 
  27.          bool Close( ); 
  28.          bool Connect( const char* pszDSN, const char* pszUName, const char* pszUPasswd ); 
  29.          bool DisConnect( ); 
  30.          bool Clear( ); 
  31.          unsigned int     SQLQuery( const char* pszSQL ); 
  32.          unsigned int     SQLExec( const char* pszSQL ); 
  33.          unsigned int     SQLExecAutoID( char *pszSQL ); 
  34.          bool    IsOpen( ); 
  35.          //查询的结果数量,更新时返回更新的记录数量,删除时返回删除的数量 
  36.          unsigned int   GetCount( ); 
  37.          //返回查询结果的列数两 
  38.          unsigned int   GetColumns( ); 
  39.          int     GetIntValue( unsigned int uiIndex ); 
  40.          char *                          GetStrValue( unsigned int uiIndex ); 
  41.          //取消操作 
  42.          bool                    Cancel( ); 
  43.          //获取错误代码 
  44.          long   GetError( ); 
  45.          //下一个 
  46.          bool           Next( ); 
  47.          bool           Eof( ); 
  48.          
  49.          bool    Lock(); 
  50.          bool    UnLock(); 
  51. private
  52.          SQLHENV   V_OD_Env_;    // Handle ODBC environment 存放环境变量 
  53.          SQLHDBC   V_OD_hdbc_;    // Handle connection 连接句柄 
  54.          SQLHSTMT  V_OD_hstmt_;   // SQL语句的句柄 
  55.          SQLINTEGER V_OD_rowanz_;   // 操作影响的记录数量 
  56.          SQLSMALLINT V_OD_colanz_;   // 操作影响的记录包含的字段数量 
  57.          SQLINTEGER  V_OD_err_;  // sql语句执行后的错误代码 
  58.          char* pszField_[FIELD_NUM];  // 存放一条查询结果集,缓冲区根据查询结果创建 
  59.          int  nMaxFiledLen_;    //字段的最大值 
  60.          bool bOpened_; 
  61.          bool bConnected_; 
  62.          bool bEof_; 
  63.          
  64.          pthread_mutex_t mutex_; 
  65.          bool mutex_inited_; 
  66. }; 
  67. #endif 

(bat603)

本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201101/10772.html]
本文出处:CSDN博客 作者:bat603
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容