- 论坛徽章:
- 15
|
本帖最后由 yulihua49 于 2010-11-25 12:46 编辑
最近在用DB2 CLI ODBC写一个db访问层,C的,没有类似Java的Hibernat之类的东西。
之前的代码全部是使用D ...
logicBaby 发表于 2010-11-23 19:47 ![]()
做了一个数据库包装器,支持ORACLE和DB2。
在包装过程中,支持绑定变量,是透明绑定的,程序员不需要了解绑定的细节。
使用方法:
#include <sqli.h> //sql intrefave,自己写的接口定义
。。。。。。
T_SQL_Connect SQL_Connect; //包装器定义的数据库句柄
DAU t_DAU; //Data Access Unit
char buf[4096];
TTT_stu ttt;//对应数据表TTT的数据结构定义;
extern T_PkgType TTT_tpk[]; //数据表TTT的模板,在外部由实用程序自动生成(包括 TTT_stu)。
envcfg(argv[1]);//读配置文件,有数据源的连接定义
int ret=db_open(&SQL_Connect); //打开数据库
DAU_init(&t_DAU,&SQL_Connect,0,&ttt,TTT_tpl);//构建DAU
ttt.ID=1;//检索条件
sprintf(buf,"WHERE ID=:ID");//就像Hibernate的HQL,只写where子句,绑定变量是模板中的列名。
ret=DAU_select(&t_DAU,stmt,0); //构建SQL语句,执行,绑定变量。0代表需要全部结果集
//生成的语句是:SELECT ID,"Ch" Ch,VCH,SH,DB,BI,TO_CHAR(TIMESTAMP_ISO(DAY),'YYYYMMDD') as DAY,TO_CHAR(TIMS,'YYYY-MM-DD HH24:MI:SS.NNNNNN') as TIMS,TO_CHAR(TIMESTAMP_ISO(TIM),'HH24:MI') as TIM,DCM FROM ZHOUGX.ttt WHERE ID=?
if(ret>0) while(!DAU_next(&t_DAU)) {
//处理每一行记录,在ttt里
}
DAU_free(&t_DAU); //释放DAU
___SQL_CloseDatabase(&SQL_Connect);//关闭数据库
db2_trem();//释放DB2环境句柄
这个应用流程是否够简单?感兴趣可以继续交流,可以提供源码。支持多线程,含连接池操作。
OCI与CLI用法相同,只需要更换底层库。
可以参加SDBC群交流,那个群里提供的OCI包装,db2的刚刚写好,运行效率还是很高的。因为有了OCI的经验。
http://bbs.chinaunix.net/viewthr ... ;page=1#pid13162420 |
|