linux学习:sqlite3简单数据库查询操作
1、Fedora下首先确保已装sqlite3,用命令行的方式装比较麻烦,其实Febora20中软件里面可以找到一个名叫Sqliteman的软件,下载安装就行了
/* ============================================================================ Name : Test.c Author : wangchuan Version : Copyright : Your copyright notice Description : Hello World in C, Ansi-style ============================================================================ */ #include <sqlite3.h> #include <stdio.h> #include <malloc.h> #include <stdlib.h> #include <string.h> sqlite3 *db = NULL; int open_database(const char *dbfile) { int result; result = sqlite3_open(dbfile,&db); return result; } int close_database(void) { int result; result = sqlite3_close(db); return result; } #define TM_L 14 typedef struct _calllist callist; struct _calllist{ long id; int type; long telnum; char btime[TM_L+1]; long tcount; float charge_rate; float charge_sum; }; void printdb(callist *cl,int length) { int i= sizeof(callist); int j; char btime[TM_L+1]={0}; for(j=0;j<length/i;j++){ memcpy(btime,(cl+j*i)->btime,TM_L); printf("%ld, %d, %ld, %s, %ld, %1.2f, %1.2f\n", (cl+j*i)->id, (cl+j*i)->type, (cl+j*i)->telnum, btime, (cl+j*i)->tcount, (cl+j*i)->charge_rate, (cl+j*i)->charge_sum); } } int main() { const char *dbfile = "data.sqlite"; callist *p_cl,*cl; int res; char *errmsg=NULL; char **result; int row,col; int i; res=open_database(dbfile); if(res!=0){ printf("数据库打开失败:%s\n",sqlite3_errmsg(db)); return 1; } puts("数据库已打开"); const char *sqlcmd = "SELECT * FROM list"; res = sqlite3_get_table(db,sqlcmd,&result,&row,&col,&errmsg); if(res!=SQLITE_OK) printf("查询失败,代码:%d-%s\n",res,errmsg); else if(row<1) puts("查询结果为0条"); else{ puts("查询成功,查询结果为:"); cl = malloc(sizeof(callist)*row); p_cl=cl; for(i=1;i<=row;i++,p_cl+=sizeof(callist)){ p_cl->id=atol(result[i*col]); p_cl->type=atoi(result[i*col+1]); p_cl->telnum=atol(result[i*col+2]); memcpy(p_cl->btime,result[i*col+3],TM_L); p_cl->tcount=atol(result[i*col+4]); p_cl->charge_rate=atof(result[i*col+5]); p_cl->charge_sum=atof(result[i*col+6]); //printf("%d\n",p_cl->id); } sqlite3_free_table(result); printdb(cl,sizeof(callist)*row); free(cl); } res=close_database(); if(res!=0){ printf("数据库关闭失败:%s\n",sqlite3_errmsg(db)); return 1; } puts("数据库已关闭"); return 0; }
2、cd到此目录下编译:
cc Test.c -o Test -lsqlite3
3、运行:
./Test
注:在最后关闭数据库时会提示段错误(吐核),也没找到什么原因造成的。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。