SQLite的编程操作②
各种操作数据库中表的C接口函数介绍
主要函数:
int sqlite3_exec(
sqlite3*,
const char *sql,
int (*callback)(void*,int,char**,char**),
void *data,
char **errmsg
);
sqlite3* : open 打开的数据库
const char* sql, : 执行的sql功能语句(可以很多语句)
*callback, : sql语句对应的回调函数
void* data, : 传递给回调函数的 指针参数
char **errmsq : 错误信息
int callback(void *arg, int column_size, char *column_value[], char
*column_name[])
*arg :是sqlite3_exec函数的第四个参数data
column_size :数据库的字段数(就是name sec num 这些类型有几个)
column_value[] :列的值(就是对应的name sec score 对应的值)
column_name :字段名字(就是name sec score的这些名字)
回调函数:会先执行*sql对应的功能命令,然后将结果传递给回调函数
数据库中有几条数据它回调函数就会调用几次;
编写操作数据库中表的C接口实战
功能描述:
查看数据库表中的数据;
代码:
#include <stdio.h>
#include <sqlite3.h>
#include <stdlib.h>
int callback(void *arg, int column_size, char *column_value[], char*column_name[])
{
int i;
printf("arg = %s\n",(char *)arg);
for(i=0;i<column_size;i++){
printf("%s = %s\n",column_name[i],(char *)column_value[i]);
}
printf("========================\n");
return 0 ;// 数据库中有几条数据它回调函数就会调用几次
}
int main(int argc,char **argv)
{
sqlite3 *db = NULL;
int ret = 0;
char *errmsg;
if(argc<2){
printf("Uage: %s xxx.db\n",argv[0]);
exit(-1);
}
if((ret = sqlite3_open(argv[1],&db)) == SQLITE_OK){
printf("ret = %d create %s ok\n",ret,argv[1]);
}else{
printf("ret = %d creat %s fail\n",ret,argv[1]);
printf("error num = %d error mesg:%s\n",sqlite3_errcode(db),sqlite3_errmsg(db));
if(ret==14){
printf("permisson deny\n");
}
exit(-1);
}
sqlite3_exec(db,"select * from stu;",callback,"into callback",&errmsg);
sqlite3_close(db);
return 0;
}
测试:
test.db的数据库数据:
四个数据段
两条数据
代码执行: