sqlite3_open(const char *filename,sqlite3 **ppDb)//打开数据库
//若文件名不存在,则创建此文件!
PS:在这里介绍一下,sqlite在相关返回值里面定义了宏 例如:SQLITE_OK 就是操作正常的意思。
![](https://i-blog.csdnimg.cn/blog_migrate/4a6b939440769f5d59d041f2f89ddb16.png)
有很多人说sqlite很难学,其实它相对其他的数据库很简单。
你想一想其他的数据库,基本上都是网络类型的,大型的,除了SQL语句的使用外,还需要一些额外的语句规矩。所以我感觉对于一个本地存储只需要用到SQL语句就可以操作sqlite数据库已经不难了。
那么sqlite3其实也就是sqlite的最新版本而已。我在写文章的时候很容易就写成sqlite
sqlite3_close(sqlite3 *ppDb)//根据返回的ppDb的值来关闭带有这个值的数据库。我们在打开的时候其实就获取了数据库ppDb的值。
所以相对来说,sqlite的函数也是很简单的。
int sqlite3_exec(sqlite3* ppDb,const char *sql,int (*callback)(void*,int,char**,char**),void *,char **errmsg)
第一个参数是数据库的句柄
第二个参数是SQL语句
第三个参数是回调函数
第四个参数是与回调函数关联的指针,当这个函数执行完后那么这个参数的值最后会传到回调函数里,如果不需要传递指针给回调函数,那么第三个和第四个都可以填NULL。
第五个参数是错误提示信息
有的人不是很理解,为什么需要回调函数呢?有可能你在insert into的时候,还有delect的时候,你可能没有感觉到回调函数的作用!但是我们百题不离其宗,相比大家都知道我们为什么要写数据呀?那就是要存储,但是存储是目的吗?如果说你的数据我查不出来,看不到,那跟没有数据,跟你当初没有存这个数据有多大区别?
所以其实使用数据库最终的目的还是写和查。
那么怎么查呢?就用到了我们的回调函数了!所以说大家往后看。
# include <stdio.h> # include "sqlite3.h" # include <stdlib.h> int callback(void *data,int col_count,char **col_values,char **col_name) { //每条记录回调一次该函数,有多少条就回调多少次 //定义的参数,你不要想太多,其实这就是一个格式。 int i; for(i=0;i<col_count;i++) { printf("%s=%s\n",col_name[i],col_values[i]==0?"NULL":col_values[i]); } return 0; } int main(void) { sqlite3 *db;//建立一个sqlite3类型的指针db!可以当做数据库的操作句柄。 //没有这个句柄那么所有的sqlite3函数都没有任何实际意义 const char *SQL1="insert into sjk values(1,'myd','2013-10-9');";//将SQL语句赋值在变量里! const char *SQL2="insert into sjk values(2,'myd','2013-10-9');";//SQL语句我就不多说了。 //从数据库查询数据 const char *SQL3="select * from sjk;";//这里是重点我们在最下面可以看到回调函数的用法! char *errmsg=0; int Feedback = sqlite3_open("sqlite3.db", &db); //打开指定的数据库文件,如果不存在将创建一个同名的数据库文件,并返回给db句柄值。 if( Feedback != SQLITE_OK ) { printf("没有打开名为:sqlite3.db 的数据库\n 原因是:%s\n", sqlite3_errmsg(db)); system("pause"); //sqlite3_errmsg()是返回错误后的提示信息!参数是数据库的操作句柄。 sqlite3_close(db); //sqlite3_close()是关闭指定数据库句柄的数据库! exit(-1);//非正常退出! } else printf("成功打开或成功创建 名为:sqlite3.db !\n"); sqlite3_exec(db,"create table sjk(id integer,name text,birthday blob)",0,0,&errmsg);//创建表 sqlite3_exec(db,SQL1,0,0,&errmsg);//插入数据1 sqlite3_exec(db,SQL2,0,0,&errmsg);//插入数据2 printf("插入数据成功\n"); sqlite3_exec(db,SQL3,callback,0,&errmsg);//查询数据将返回的数据返回到callback里面。 sqlite3_close(db); db = 0; printf("数据库关闭成功!\n"); system("pause"); return 0; } |
那么在这个回调函数的方面,我想接触过C语言的人都了解。然而我也解释不了到底怎么回事,所以大概的就说了一下 ,其实就是将查询的数据返回到了回调函数里,然后根据参数将他们分类了。
如果有人说不想用回调函数,也搞不懂,那么就看下一章!