Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1332853
  • 博文数量: 185
  • 博客积分: 50
  • 博客等级: 民兵
  • 技术积分: 3934
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-11 13:11
个人简介

iihero@ChinaUnix, ehero.[iihero] 数据库技术的痴迷爱好者. 您可以通过iihero AT qq.com联系到我 以下是我的三本图书: Sybase ASE in Action, Oracle Spatial及OCI高级编程, Java2网络协议内幕

文章分类

全部博文(185)

文章存档

2014年(4)

2013年(181)

分类: C/C++

2013-07-22 14:27:24

项目地址:

下载地址:downloads/list

 

hisqlapi_1.0.0.9 数据库通用API: hisqlapi C++ wrapper,  这是自行开发的标准版,免费使用。
同时接受捐赠以增进后续开发,支付宝帐户:iiihero AT hotmail.com


下载地址:



hisqlapi.dll分别放到压缩包build目录的debug和release子目录里头。

这是初始版本 for windows,目前支持ODBC, sqlite3
以及postgresql的一部分, 其它数据库的api wrapper在陆续开发中.

linux版本编译出来以后也会投放出来。

计划支持目标:
HiSQLAPI wrapper for MySQL
HiSQLAPI wrapper for PostgreSQL(已经完成一部分)
HiSQLAPI wrapper for Oracle (OCI)
HiSQLAPI wrapper for DB2 (CLI)
HiSQLAPI wrapper for ASE (openclient)
HiSQLAPI wrapper for SQL Server(ADO or OLEDB)

附加说明:
所有的库都是对最底层API的封装,同时又是松耦合,即使用hisqlapi里头的头文件,只有当你要连接具体的数据库时,它要用到的dll才会被加载。

1. 目前只提供了wrapper,总的接口并没有完全合笼。使用时可以直接使用具体类来操作sqlite3 (HiSQlite3Connection, HiSqlite3Statement, HiSqlite3ResultSet ...)
ODBC (HiODBCConnection, HiODBCStatement, HiODBCResultSet ...)

2. 使用时,不需要链接你原来的具体的库,只需要链接hisqlapi.lib, hisqlapi.dll即可,原始动态库,放到path里头即可。

3. 示例里有一个很简单的例子,来演示sqlite3的数据库操作:

[cpp]
  1. time_t t0; time(&t0);  
  2.     HiSqlite3Connection conn;  
  3.     try  
  4.     {  
  5.         conn.connect(dbPath, """");  
  6.         conn.executeCmd("create table t(id int primary key, col2 varchar(32), col3 double, col4 blob)");  
  7.         char sql[256];  
  8.         conn.begin();  
  9.         for (int i=0; i<1000; i++)  
  10.         {  
  11.             sprintf(sql, "insert into t(id, col2) values(%ld, 'xxx_%ld')", (i+1), (i+1));  
  12.             conn.executeCmd(sql);  
  13.         }  
  14.         conn.commit();  
  15.         memset(sql, 0, sizeof(sql));  
  16.         sprintf(sql, "update t set col3 = :1, col4 = :col4 where id = :2");  
  17.         HiSqlite3Statement* stmt = conn.prepareStatement(sql);  
  18.         stmt->setDouble(1, 12345.45f);  
  19.         HiMemStream ms;  
  20.         for (int i=0; i<10000; i++)  
  21.         {  
  22.             ms<
  23.         }  
  24.         tblob_ lob;  
  25.         ms.getData(lob);  
  26.         stmt->setBlob(2, lob);  
  27.         stmt->setInt(3, 1);  
  28.         stmt->executeUpdate();  
  29.         std::cout<<"after update, affected count = "<affectedRows()<
  30.         delete stmt;  
  31.         stmt = conn.createStatement();  
  32.         HiSqlite3ResultSet* rset = stmt->executeQuery("select * from t where id = 1");  
  33.         while (rset->next())  
  34.         {  
  35.             std::cout<<"col3 = "<getValue(3)<
  36.         }  
  37.         rset->close();  
  38.         delete rset;  
  39.         delete stmt;  
  40.         std::cout<<"default autocommit = " <
  41.         conn.setAutoCommit(false);  
  42.         std::cout<<"after set false, autocommit = " <
  43.         conn.setAutoCommit(true);  
  44.         std::cout<<"after set true, autocommit = " <
  45.                   
  46.         conn.executeCmd("drop table t");  
  47.         time_t t1; time(&t1);  
  48.         std::cout<<"total time of testSqlite(insert): "<" seconds"<
  49.         time(&t0);  
  50.         conn.vacuumDB();  
  51.         time(&t1);  
  52.         std::cout<<"total time of testSqlite(vacuum db): "<" seconds"<
  53.     }  
  54.     catch (HiException& ex)  
  55.     {  
  56.         std::cout<
  57.     }  
阅读(2262) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~