哈,说对了。
还要回答大家一个问题,泛型编程效率高吗?是不是因为需要一些语句的组装和类型的判断就牺牲了一定的性能呢?下面举个例子,这是一个可以加载任何单表的程序,为了逻辑清晰,略去了错误处理:
int loadfile(T_SQL_Connect *SQL_Connect,char *tablename,FILE *ifd,
FILE *ofd,int Pflg,char *buf,int buflen,char dlmt)
{
char *p,tabn[512];
DAU _DAU;
int rows,ret;
int upd,loss;
int num;
INT64 now;
ret=DAU_init(&_DAU,SQL_Connect,tablename,0,0);//依据tablename,从数据库建立模板
upd=loss=0;
num=0;
now=now_usec();
for(rows=0;!ferror(ifd);rows++) {
fgets(buf,buflen,ifd);
if(feof(ifd)) break;
if(dlmt=='J') {//JSON格式
JSON_OBJECT json=json_tokener_parse(buf);
DAU_fromJSON(&_DAU,json); //泛型,JSON反序列化到DAU里边的struct。
json_object_put(json);
} else {//CSV格式
ret=DAU_pkg_dispack(&_DAU,buf,dlmt);//泛型,CSV反序列化到DAU里边的struct
}
*buf=0;
ret=DAU_insert(&_DAU,buf);//虽然在循环体里,但只有第一次会生成语句,打开游标,绑定变量。之后,只进行bind和exec,所以效率是非常高的。
。。。。。。。。。
}
【 在 z16166 的大作中提到: 】
: 现阶段反射的实现,处理meta信息,只能是要么用宏,要么用预处理了
: 用预处理的库也有现成的,比如开源的ODB,支持ORM
: ylh1969老哥说的是他在pure C时代的实现,他跟我们讨论C++的实现那是财务自由退休了放不下技术讨论着玩
: ...................
--
修改:ylh1969 FROM 221.221.52.*
FROM 221.221.52.*