sqlite3_exec.c()函数的简单应用
/*
exec每找到一条记录,都会 调用该函数, 通过将记录 通过参数传给形参变量
*/
int sqlite3_cb_fun(void *para, int f_num, char **f_value, char **f_name)
{
int i;
static int cnt = 0;
if(cnt++ == 0) {
for(i=0;i<f_num;i++){
printf("%12s",f_name[i]);
}
printf("\n");
}
for(i=0;i<f_num;i++){
printf("%12s",f_value[i]);
}
printf("\n");
return 0; //表示成功
}
int main(int argc,char **argv)
{
int ret;
sqlite3 *db;
/*
#include <sqlite3.h>
int sqlite3_open(char *path, sqlite3 **db);
功能:打开sqlite数据库
path: 数据库文件路径
db: 指向sqlite句柄的指针
返回值:成功返回0,失败返回错误码
char *sqlite3_errmsg(sqlite3 *db);
*/
ret = sqlite3_open("./school.db", &db);
if(ret){
printf("open err:%s\n",sqlite3_errmsg(db));
return -1;
}
/*
执行sql语句,返回结果
---方法1:
--工作过程,去执行sql指定的语句,每发现一个匹配记录,回调函数被调用一次.
int sqlite3_exec(sqlite3 *db, const char *sql,
sqlite3_callback callback,
void *args, char **errmsg);
----sql: SQL语句,比如"select * from table;
注意""在sql中不可忽略,snprintf("___ \"xx\" ____ ")
----callback:回调函数,有的sql不需要回调函数,置NULL即可.
----errmsg:错误信息指针的地址
----返回值:成功返回0,失败返回错误码
typedef int (*sqlite3_callback)(void *para, int f_num, char **f_value, char **f_name)
--f_num:返回结果的 列的个数/每条记录属性的个数.
--f_value: 一个字符串数组,分别是 每个属性的值.
--f_name: 一个字符串数组, 表示每个属性的名字
*/
ret = sqlite3_exec(db,"select * from student;",
sqlite3_cb_fun,NULL,NULL);
if(ret){
printf("sqlite3_exec err:%s\n",sqlite3_errmsg(db));
return -1;
}
/*
int sqlite3_close(sqlite3 *db);
功能:关闭sqlite数据库
返回值:成功返回0,失败返回错误码
*/
ret = sqlite3_close( db);
if(ret){
printf("close err:%s\n",sqlite3_errmsg(db));
return -1;
}
/*
printf("pls input name id home age num:");
scanf("%s %d %s %d %d",name,&id,home,&age,&num);
insert into student (name,id,home,age,num) values ();
sprintf(buf,
"insert into student (name,id,home,age,num,sex) values (\"%s\",%d,\"%s\",%d,%d,\'%c\');",
name,id,home,age,num);
结果是
insert into student (name,id,home,age,num) values (xiaoming,2356,chogqing qijiang,23,2568,M);
字符串和字符都需要 加上 "" ''
*/
}
sqlite3_get_table.c()函数的简单应用
/*
exec没找到一条记录,都会 调用该函数, 通过将记录 通过参数传给你
*/
int sqlite3_cb_fun(void *para, int f_num, char **f_value, char **f_name)
{
int i;
static int cnt = 0;
if(cnt++ == 0) {
for(i=0;i<f_num;i++){
printf("%12s",f_name[i]);
}
printf("\n");
}
for(i=0;i<f_num;i++){
printf("%12s",f_value[i]);
}
printf("\n");
return 0; //表示成功
}
int main(int argc,char **argv)
{
int ret;
int i;
char buf[128];
sqlite3 *db;
int nrow;
int ncolum;
char **resultp;
/*
#include <sqlite3.h>
int sqlite3_open(char *path, sqlite3 **db);
功能:打开sqlite数据库
path: 数据库文件路径
db: 指向sqlite句柄的指针
返回值:成功返回0,失败返回错误码
char *sqlite3_errmsg(sqlite3 *db);
*/
ret = sqlite3_open("./school.db", &db);
if(ret){
printf("open err:%s\n",sqlite3_errmsg(db));
return -1;
}
/*
执行sql语句,返回结果
---方法1:
--工作过程,去执行sql指定的语句,每发现一个匹配记录,回调函数被调用一次.
int sqlite3_exec(sqlite3 *db, const char *sql,
sqlite3_callback callback,
void *args, char **errmsg);
----sql: SQL语句,比如"select * from table;
注意""在sql中不可忽略,snprintf("___ \"xx\" ____ ")
----callback:回调函数,有的sql不需要回调函数,置NULL即可.
----errmsg:错误信息指针的地址
----返回值:成功返回0,失败返回错误码
typedef int (*sqlite3_callback)(void *para, int f_num, char **f_value, char **f_name)
--f_num:返回结果的 列的个数/每条记录属性的个数.
--f_value: 一个字符串数组,分别是 每个属性的值.
--f_name: 一个字符串数组, 表示每个属性的名字
*/
sprintf(buf,"select * from student;");
ret = sqlite3_exec(db,buf,
sqlite3_cb_fun,NULL,NULL);
if(ret){
printf("sqlite3_exec err:%s\n",sqlite3_errmsg(db));
return -1;
}
/*
执行sql语句方法二:
int sqlite3_get_table(sqlite3 *db, const char *sql,
char***resultp, int*nrow, int *ncolumn, char **errmsg);
sql: SQL语句
resultp:用来指向sql执行结果,是一个 一维字符串数组(nrow+1)行*ncolumn列
nrow:满足条件的记录的数目
ncolumn:每条记录包含的字段数目
返回值:成功返回0,失败返回错误码
*/
ret = sqlite3_get_table(db, "select * from student;",
&resultp, &nrow, &ncolum, NULL);
if(ret){
printf("sqlite3_get_table err:%s\n",sqlite3_errmsg(db));
return -1;
}
/*原来resultp是一个两重指针
*/
for(i=0;i< (nrow+1)*ncolum ;i++){
printf("%12s",resultp[i]);
if( (i+1)% ncolum == 0){
printf("\n");
}
}
/*
int sqlite3_close(sqlite3 *db);
功能:关闭sqlite数据库
返回值:成功返回0,失败返回错误码
*/
ret = sqlite3_close( db);
if(ret){
printf("close err:%s\n",sqlite3_errmsg(db));
return -1;
}
/*
printf("pls input name id home age num:");
scanf("%s %d %s %d %d",name,&id,home,&age,&num);
"insert into student (name,id,home,age,sex) values ("xiaowang",23,32,'M');"
sprintf(buf,
"insert into student (name,id,home,age,num,sex) values (\"%s\",%d,\"%s\",%d,%d,\'%c\');",
name,id,home,age,num);
结果是
insert into student (name,id,home,age,num) values (xiaoming,2356,chogqing qijiang,23,2568,M);
字符串和字符都需要 加上 "" ''
*/
}