运行时泛型,我的程序例子:
读文件插入数据库。
文件第一行是:
表名:列名,列名,......列名,
后边每行就是按这个格式的数据,类似于JSON的压缩格式。
问题1:如果没有运行时泛型,这个任务打算怎么搞?
2:可否根据这个例子,让AI设计一套运行时泛型系统。如果AI能够完成这个任务,码农基本可以下岗了。
static int insert_a_table(T_SQL_Connect *db_conn,FILE *xfd)
{
char cols[4096],stmt[4096],*p,*savep;
char *tabname;
int ret,i,n;
t_node node;
ctx_stu ctx;
T_Tree *cols_list=NULL;
SdbcDAO *dao;//Data Access Object,可以认为是个可反射的数据库对象。
//取出表名、列名
if(NULL==fgets(cols,sizeof(cols),xfd)) {
ShowLog(1," 没有数据!",__FUNCTION__);
return -1;
}
TRIM(cols);
tabname=strtok_r(cols,":",&savep);//取出表名
if(!tabname) {
ShowLog(1,"%s: tabname is emypt!",__FUNCTION__);
return -1;
}
strupper(tabname);
try {
dao=new SdbcDAO(db_conn,tabname);//从数据库读出表结构,生成数据区(一个struct的布局)和模板(运行时反射模板)
} catch( ... ) {
ShowLog(1,"%s:%s Table not found!",__FUNCTION__,tabname);
return -2;
}
dao->Data_init();//初始化数据区
ctx.dp=dao;
node.n=0;初始化列号
//生成加载列名表
while(NULL != (p=strtok_r(NULL,",",&savep))) {//按,分割的列名。按别的分隔符也可以,在这里改
if((255&*p) <= ' ') break;
node.tp=dao->getTemplate(p);//按列名找到该列模板
if(!node.tp) { //找不到模板这个列的数据将被跳过
ShowLog(1,"%s:%s column [%s] not found!",__FUNCTION__,tabname,p);
}
node.n++;
cols_list=BB_Tree_Add(cols_list,&node,sizeof(node),node_cmp,NULL);//列名加入平衡二叉树,这个二叉树也是泛型的。
}
//加载数据
for(i=0;fgets(stmt,sizeof(stmt),xfd);i++) {//读每一行数据
TRIM(stmt);//删除尾空格换行符
ctx.data=ctx.p=stmt;
ret=BB_Tree_Count(cols_list,&ctx,fill_cols);//以列名表导航,填充每一列数据,本函数是遍历二叉树,对每一个节点执行fill_cols。
*stmt=0;
ret=dao->insert(stmt);//生成SQL语句,打开游标(只第一次需要),绑定变量,插入数据库,1行
if(ret<0) {
ShowLog(1,"%s:insert %s fault,i=%d,err=%d,%s",__FUNCTION__,stmt,i,
db_conn->Errno,db_conn->ErrMsg);
break;
i--;
}
}
BB_Tree_Free(&cols_list,NULL);
delete dao;
return i;
}
【 在 allegro 的大作中提到: 】
:
https://zhuanlan.zhihu.com/p/1919923607997518115?share_code=iC2LCPYMXVPJ&utm_psn=1920369550328850394: 这是大事啊!
: - 来自 水木社区APP v3.5.7
--
修改:ylh1969 FROM 221.221.54.*
FROM 221.221.48.*