使用sqlite3_exec
发布时间:2020-12-12 19:13:33 所属栏目:百科 来源:网络整理
导读:我有下一个SQLITE3命令,它生成一个包含超过6000万条记录的文件: .mode csv.output matppp.csvselect mat,ppp from matppp order by mat;.output stdout 如何使用以下命令将这些命令包含到C程序中: sqlite3_exec(db,"..........",NULL,db_err); ? 当我自己
我有下一个SQLITE3命令,它生成一个包含超过6000万条记录的文件:
.mode csv .output matppp.csv select mat,ppp from matppp order by mat; .output stdout 如何使用以下命令将这些命令包含到C程序中: sqlite3_exec(db,"..........",NULL,&db_err); ? 当我自己尝试这样做时,c程序在执行时会产生表达式错误. 谢谢!! 如果你想在C中执行此操作(而不是使用sqlite3的命令行程序管理那些具有那些漂亮的点命令),那么你将不得不使用回调.为了您的剪切和粘贴方便,这里是代码,被用于统计计算的Apophenia库中. 第一部分: sqlite3 *db=NULL; //The global database handle. static int apop_db_open(char *filename){ if (!filename) sqlite3_open(":memory:",&db); else sqlite3_open(filename,&db); if (!db) printf("Not sure why,but the database didn't open.n"); return 0; } //From the SQLite manual: #define ERRCHECK {if (err!=NULL) {printf("%sn",err); sqlite3_free(err); return 0;}} apop_data * apop_sqlite_query_to_screen(char *query){ char *err = NULL; if (db==NULL) apop_db_open(NULL); sqlite3_exec(db,query,The_Callback,a_param,&err); ERRCHECK } 第二部分: 回调将具有以下形式,并为返回的每一行运行一次.注意参数a_param如何传递;如果你不需要它(如本例所示),只需将其设置为NULL即可. int The_Callback(void *a_param,int argc,char **argv,char **column){ for (int i=0; i< argc; i++) printf("%s,t",argv[i]); printf("n"); return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |