C语言使用sqlite3数据库【第二节】

sqlite3_open(const char *filename,sqlite3 **ppDb)//打开数据库

//若文件名不存在,则创建此文件!

PS:在这里介绍一下,sqlite在相关返回值里面定义了宏  例如:SQLITE_OK 就是操作正常的意思。

 

有很多人说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语言的人都了解。然而我也解释不了到底怎么回事,所以大概的就说了一下 ,其实就是将查询的数据返回到了回调函数里,然后根据参数将他们分类了。
如果有人说不想用回调函数,也搞不懂,那么就看下一章!
 
posted @ 2017-02-02 07:05  曦景懦白  阅读(338)  评论(0编辑  收藏  举报