sqlite3 编程只需要一个头文件与一个库文件,安装请看sqlite3 在linux系统上的安装
/*filename:insert.c*/ #include<stdio.h> #include<sqlite3.h> intmain() { sqlite3*db; sqlite3_open("stu.db",&db); char*sql="insertintostudentvalues(10,'james',99)"; sqlite3_exec(db,sql,NULL,NULL); sqlite3_close(db); return0; }
如上代码,最简单的操作,只需要一个结构 "sqlite *db",
三个函数,"sqlite3_open()" "sqlite_exec()" "sqlite_close()"。
$gccinsert.c-oinsert-lsqlite3
sqlite3 是一个小巧的数据库,命令,接口都很简单,手册可以去官网www.sqlite.org 查看,也可以下载来,离线查看,官网上的链接位置如下。
入门基本函数:Documentation -> sqlite Programming Interfaces -> Introduction to the C/C++ API
参考手册:Documentation -> sqlite Programming Interfaces -> C/C++ API Reference
数据库结构体:
typedefstructsqlite3sqlite3; sqlite3*db;
关于这个结构体就不必多说,如上只要声名一个指针即可,如何操作都封装在库函数里了,之后用到的库函数的第一个参数大多都是这个结构体指针。
数据库的开关:
intsqlite3_open(constchar*filename,sqlite3**ppDb); intsqlite3_close(sqlite3*);
"sqlite3_open()" 有两个参数,第一个是数据库的文件名,第二个是前面声名的指针取地址。
if(sqlite3_open("stu.db",&db)) { puts(sqlite_errmsg(db)); exit(1); }
常用的方式如上,sqlite3 中的函数保持了统一的风格,返回值表示了函数调用的结果,sqlite3 定义了 31 个基本返回值与 52 个扩展值。
(0) SLITE_OK,当函数成功时返回 0
成功就只有一种,但失败有各种失败情况,定义的 83 个返回值描述了 82 种失败的原因。
constchar*sqlite3_errmsg(sqlite3*);
参数是前声名的数据库结构指针,返回值是字符串指针,如上直接打印即可。
数据库的操作:
intsqlite3_exec(sqlite3*,constchar*sql,int(*callback)(void*,int,char**,char**),void*,char**errmsg);
看到如此复杂的函数,就知道了它能做很多的事情。事实上也是如此,它相当于一个 sql 命令接口,直接把第二个参数的字符串转换成 sql 语句去解析执行。
typedefint(*callback)(void*,char**); intsqlite3_exec(sqlite3*,callback,char**errmsg);
将第三个参数单拉出来,这样声名一个别名,"sqlite3_exec" 参数看着就很简捷了,有五个,第一个是数据库的结构体指针,第二个是 sql 语句的字符串指针,第三个是回调函数,第四个是回调函数的参数,第五个是错误信息的字符串指针的取地址。前两个参数与最后一个参数的用法,如下。
char*errmsg; if(sqlite_exec(db,"select*fromstudent",&errmsg)) { puts(errmsg); sqlite3_free(errmsg); exit(1); }
前两个参数很好懂,第五个参数,先声名一个指针,然后取址传给 "sqlite3_exec",此函数在调用出错时会用 "sqlite3_malloc()" 分配一个空间存放错误的字串描述,所以出错的时候用完 "errmsg" 需要用 "sqlite3_free" 释放空间。
intdeal(void*arg,intncol,char*data[],char*head[]) { inti; for(i=0;i<ncol;i++) printf("%s\t%s\n",head[i],data[i]); }
这就上述的回调函数简单用法。有四个参数,第一个是 "sqlite3_exec" 主动传来的参数即 "sqlite3_exec" 的第四个参数。第二个参数,是查询结果的字段数,即结果的列数。第三个是查询的记录,用指针数组来存放,每个字段值用字符串存储,配合前个参数 "ncol" 就可以如上遍历整行记录了。第四个参数是表头,也是用指针数组来存储,每个字段名用字串存储,和前个参数一样用法。