sqlite常用的接口函数:
1、sqlite3_open
功能:打开一个数据库,如果该数据库不存在,则会自动创建,打开或者创建数据库的命令会被缓存,直到这个数据库真正被调用的时候才会被执行
原型:int sqlite3_open(const char *dname,sqlite3 **db)
参数:dname:要打开的数据库的名字,包含路径,SQLite支持内存数据库,内存方式存储使用文件名".memory"
db:返回的打开的数据库句柄
返回值:成功,返回SQLITE_OK,失败,返回其他值
2、sqlite3_close
功能:关闭一个已经打开的数据库,与sqlite3_open匹配使用
原型:int sqlite3_close(sqlite3 *db)
参数:db:打开的数据库句柄
返回值:成功,返回SQLITE_OK,失败,返回其他值
3、sqlite3_exec
功能:编译和执行0个或多个SQL语句,查询的结果返回给调用函数callback
原型:int sqlite3_exec(sqlite3 *db,const *sql,sqlite_callback callback,void *para,charr **errmsg)
参数:db:数据库句柄;
sql:待执行的SQL语句
callback:回调函数,用以处理查询结果,如果不需要回调,可以输入NULL
para:用户传入的参数,可以为NULL
errmsg:char指针,返回错误信息
回调函数callback:
原型:int (*sqlite_callback)(void *para,int columnCount,char **columnValue,char **columnName)
参数:para:从sqlite3_exec()传入的参数指针
columnCount:查询到的该记录的列数
columnValue:一维数组,查询出的数据,数组里的每一个元素但是char*值,是一个字段内容(用字符串表示,以'\0'结尾)
columnName:该字段的名称
返回值:成功,返回SQLITE_OK,失败,返回其他值
4、sqlite3_get_table
功能:执行SQL查询
原型:int sqllite3_get_table(sqlite3 *db,const *zSql,char ***Result,int *pnRow,int *pnColumn,char **errmsg)
参数:db:数据库句柄
zSql:SQL得执行的字符串,
Result:查询结果,是由字符串组成的一维数组
pnRow:查询出有多少条记录,即查出多少行
pnColumn:查询出的记录有多少个字段,即有多少列
errmsg:错误信息
返回值:成功,返回SQLITE_OK,失败,返回其他值
5、sqlite3_free_table
功能:释放查询结果内存所占用的内存,在sqlite3_get_table()后面使用,注释该函数的输出参数里的符号集
原型:void sqlite3_free_table(char **result)
参数:result:是sqlite3_get_table()查询到的记录结果集
返回值:无
灵活使用上面几个函数的示例:
创建数据库:
#include <stdio.h>
#include <sqlite3.h>
static sqlite3 *db = NULL;
static char *errmsg = NULL;
int main()
{
int ret;
ret = sqlite3_open("book.db",&db);
ret = sqlite3_exec(db,"insert into book(id,name,sex,age,tel,phone,address) values(7,'Hero','f',89,'83211334','1344213114','东北')",0,0,&errmsg);
if(ret)
{
printf("exec failed!!\n");
}
else
{
printf("exec success!\n");
}
sqlite3_close(db);
return 0;
}
调试结果:
exec success!
查看数据库数据表的所有数据:
#include <stdio.h>
#include <sqlite3.h>
static sqlite3 *db = NULL;
static char **Result = NULL;
static char *errmsg = NULL;
int main()
{
int ret;
int i;
int j;
int nrow;
int ncolumn;
ret = sqlite3_open("book.db",&db);
ret = sqlite3_get_table(db,".mode column",&Result,&nrow,&ncolumn,&errmsg);
ret = sqlite3_get_table(db,".head on",&Result,&nrow,&ncolumn,&errmsg);
ret = sqlite3_get_table(db,"select *from book",&Result,&nrow,&ncolumn,&errmsg);
if(ret)
{
printf("query fail!\n");
}
else
{
printf("query success!\n");
for(i = 0;i < nrow;i++)
{
for(j = 0;j < ncolumn;j++)
{
printf("%9s",Result[i * ncolumn + j]);
}
printf("\n");
}
}
sqlite3_free_table(Result);
sqlite3_close(db);
return 0;
}
调试结果:
query success!
id name sex age tel phone address
1 Echo f 21 8676955615850692105 江苏
4 Chile f 12 862131311585531312 湖南
3 Lino m 54 84329101127362929137 北京
2 Leo m 2086768312118936752866 江苏
5 Beibo m 4386374293418321321344 新疆
5 Beibo m 4386374293418321321344 新疆
5 Beibo m 4386374293418321321344 新疆
5 Beibo m 4386374293418321321344 新疆
7 Hero f 89 832113341344213114 东北
7 Hero f 89 832113341344213114 东北
7 Hero f 89 832113341344213114 东北
利用回调函数和sqlite3_exec函数查询数据库里的字段:
#include <stdio.h>
#include <sqlite3.h>
static int callback(void *para,int columnCount,char **columnValue,char **columnName)
{
int i;
printf("记录包含%d个字段\n",columnCount);
for(i = 0;i < columnCount;i++)
{
printf("字段名:%s,字段值:%s\n",columnName[i],columnValue[i]);
}
printf("---------------------\n");
return 0;
}
int main()
{
sqlite3 *db;
int result;
char *errmsg = NULL;
result = sqlite3_open("book.db",&db);
if(result)
{
printf("Open database failed!\n");
return -1;
}
result = sqlite3_exec(db,"select *from book",callback,NULL,&errmsg);
sqlite3_close(db);
return 0;
}
调试结果:
记录包含7个字段
字段名:id,字段值:1
字段名:name,字段值:Echo
字段名:sex,字段值:f
字段名:age,字段值:21
字段名:tel,字段值:86769556
字段名:phone,字段值:15850692105
字段名:address,字段值:江苏
---------------------
记录包含7个字段
字段名:id,字段值:4
字段名:name,字段值:Chile
字段名:sex,字段值:f
字段名:age,字段值:12
字段名:tel,字段值:86213131
字段名:phone,字段值:1585531312
字段名:address,字段值:湖南
---------------------
记录包含7个字段
字段名:id,字段值:3
字段名:name,字段值:Lino
字段名:sex,字段值:m
字段名:age,字段值:54
字段名:tel,字段值:84329101
字段名:phone,字段值:127362929137
字段名:address,字段值:北京
---------------------
记录包含7个字段
字段名:id,字段值:2
字段名:name,字段值:Leo
字段名:sex,字段值:m
字段名:age,字段值:20
字段名:tel,字段值:867683121
字段名:phone,字段值:18936752866
字段名:address,字段值:江苏
---------------------
记录包含7个字段
字段名:id,字段值:5
字段名:name,字段值:Beibo
字段名:sex,字段值:m
字段名:age,字段值:43
字段名:tel,字段值:863742934
字段名:phone,字段值:18321321344
字段名:address,字段值:新疆
---------------------
记录包含7个字段
字段名:id,字段值:5
字段名:name,字段值:Beibo
字段名:sex,字段值:m
字段名:age,字段值:43
字段名:tel,字段值:863742934
字段名:phone,字段值:18321321344
字段名:address,字段值:新疆
---------------------
记录包含7个字段
字段名:id,字段值:5
字段名:name,字段值:Beibo
字段名:sex,字段值:m
字段名:age,字段值:43
字段名:tel,字段值:863742934
字段名:phone,字段值:18321321344
字段名:address,字段值:新疆
---------------------
记录包含7个字段
字段名:id,字段值:5
字段名:name,字段值:Beibo
字段名:sex,字段值:m
字段名:age,字段值:43
字段名:tel,字段值:863742934
字段名:phone,字段值:18321321344
字段名:address,字段值:新疆
---------------------
记录包含7个字段
字段名:id,字段值:7
字段名:name,字段值:Hero
字段名:sex,字段值:f
字段名:age,字段值:89
字段名:tel,字段值:83211334
字段名:phone,字段值:1344213114
字段名:address,字段值:东北
---------------------
记录包含7个字段
字段名:id,字段值:7
字段名:name,字段值:Hero
字段名:sex,字段值:f
字段名:age,字段值:89
字段名:tel,字段值:83211334
字段名:phone,字段值:1344213114
字段名:address,字段值:东北
---------------------
记录包含7个字段
字段名:id,字段值:7
字段名:name,字段值:Hero
字段名:sex,字段值:f
字段名:age,字段值:89
字段名:tel,字段值:83211334
字段名:phone,字段值:1344213114
字段名:address,字段值:东北
---------------------
记录包含7个字段
字段名:id,字段值:7
字段名:name,字段值:Hero
字段名:sex,字段值:f
字段名:age,字段值:89
字段名:tel,字段值:83211334
字段名:phone,字段值:1344213114
字段名:address,字段值:东北
---------------------