/*
SQLite数据库SQLite是一个开源的嵌入式关系数据库,在2000年由D.Richard Hipp发布。SQLite能够减少应用程序管理数据库的开销,可逢移植性好,高效而且可靠。SQLite嵌入到应用程序中,与应用程序共用相同的进程空间,而不是单独的一个进程。从外部看,SQLite并不像一个关系数据库,但在进程内部,却是完整的、自包含的数据库引擎。
*/
//应用到的函数:
sqlite3_open(); //打开数据
sqlite3_exec(); //执行SQL语句
sqlite3_close() //关闭数据
/*
函数参数介绍
*/
//打开数据
int sqlite3_open( //打开数据库,并得到数据句柄
"temp.db", //要打开的数据库文件名,如果没有者新建个数据库文件
&db //保存打开数据库的数据库指针
);
//执行SQL语句
typedef int (*sqlite3_callback)( //sqlite3_exec()的回调函数
void * para, //可传入指针(比如结构指针)要经过强制转换才能用
int n_column, //记录有多少个字段(即这条记录有多少列)
char ** column_value, //个关键值,查出来的数据都保存在这里
char ** column_name //跟前个char**是对应的,表示这个字段的字段名称
);
int sqlite3_exec( //执行SQL语句,没有返回值的3,4直接NULL
sqlite3*, //数据库句柄
const char *sql, //要执行的数据语句字符串的首地址
int (*callback)(void*,int,char**,char**), //(*sqlite3_callback)的地址
void *, //Callback函数第一个参数指针
char **errmsg //执行完所有SQL返回0,否者返回错误代码
);
int sqlite3_close( //关闭之前打开的数据库
sqlite3 * //要关闭的数据指针
);
//应用例子
#include <stdio.h>
#include <string.h>
#include "sqlite3.h"
//sqlite3的回调函数
//sqlite每查到一条记录,就调用一次这个回调
//回调函数原型:typedef int (*sqlite3_callback)(void*,int,char**,char**);
int LoadMyInfo(void* para,int n_column,char** column_value,char** column_name)
{
int i;
printf("记录包含%d个字段\n\n",n_column);
for(i=0; i<n_column; i++)
{
printf("字段名:%s\t字段值:%s\n\n", column_name[i], column_value[i]);
}
printf("------------------------------\n");
return 0;
}
int main(int argc, char *argv[])
{
sqlite3 * db;
int result;
char * errmsg = NULL;
result = sqlite3_open("temp.db",&db);
//数据库操作代码
/*创建一个测试表,表名叫MyTable,有2个字段:ID和name。其中ID是一个自动增加的类型,以后insert时可以不去指定这个字段,它会自己从0开始增加*/
// result = sqlite3_exec(db,"create table MyTable(ID integer primary key autoincrement,name nvarchar(32))",NULL,NULL,&errmsg);
//插入一些记录
/*
result = sqlite3_exec(db,"insert into MyTable(name) values('走路')",0,0,&errmsg);
result = sqlite3_exec(db,"insert into MyTable(name) values('骑单车')",0,0,&errmsg);
result = sqlite3_exec(db,"insert into MyTable(name) values('坐汽车')",0,0,&errmsg);
*/
//开始查询数据库
result = sqlite3_exec(db,"select * from MyTable",LoadMyInfo,NULL,&errmsg);
//关闭数据库
sqlite3_close(db);
return 0;
}