sqlite3常用的c语言函数接口

时间:2022-06-12 05:32:19
  1. sqlite3_open: 用来打开或创建一个sqlite3数据库引擎的连接
    在sqlite3数据库引擎中,用结构体sqlite3来表示 sqlite3的数据库引擎 的连接。
    我们在调用sqlite3_open这个函数时,它会给我们创建一个sqlite3数据库引擎的连接。
int sqlite3_open(
const char *filename, //database fiename, 你要打开或创建的数据库的文件名
sqlite3 **ppdb; //sqlite3这个结构体的二级指针
);
返回值:
成功返回 SQLITE_OK, 并且ppdb指向新创建的sqlite3数据库引擎的连接
其他值,表示失败。

2. sqlite3_exec:操作一个SQL引擎的数据库系统,实际上就是在这个数据库引擎上执行SQL语句

int sqlite3_exec(
sqlite * db; //指向sqlite3数据库系统引擎的连接
const char *sql; //你要执行的SQL语句的字符串
int (*callback)(void *, int, char **, char **), //函数指针,指向回调函数
void *, //将作为callback的第一个参数,传给回调函数
char **errmsg //指向错误字符串
);
返回值:
//成功返回0
//失败返回其他值,错误信息在errmsg

int (*callback)(void *, int, char **, char **), //函数指针,指向回调函数
callback主要是在SQL语句为SELECT时用,SELECT返回的结果是一个二维表, 在
sqlite3_exec实现查询语句,每查到一条记录,就会把结果返回, 每查到一条符合
条件的记录,就调用callback指向的函数。

int (*callback)(void *, //
int, //结果中多少列
char **, //char* column_value[], 指针数组,每列的值
char **, //char* column_name[], 指针数组,每列的字段名
)
  1. sqlite3_close

代码实列:

#include <stdio.h>
#include <errno.h>
#include <sqlite3.h>
/*

gcc sqlite3.c -I/usr/local/sqlite/include -L/usr/local/sqlite/lib -lsqlite3 -o sqlite3_test
*/

/*
查询结果的回调函数,当查询语句每查询到一条符合要求的记录时,
就会调用这个回调函数,并且你的回调函数要返回0(表示成功),查询引擎
才会继续往下面查询。
*/

int select_resp(void *data, int column_num ,char *column_value[], char *column_name[])
{
int i;

for (i = 0; i < column_num; i++)
{
printf("%s\t", column_name[i]);
}
printf("\n");

for (i = 0; i < column_num; i++)
{
printf("%s\t", column_value[i]);
}
printf("\n\n\n\n");


return 0;
}

int main(int argc, char *argv[])
{
int r;
/*
step 1: 调用sqlite3_open打开或创建一个sqlite3数据库引擎的连接
*/

sqlite3 *db = NULL;
r = sqlite3_open(argv[1], &db);
if (r != SQLITE_OK)
{
perror("sqlite3_open error:");
return -1;
}

/*
step 2: sqlite3_exec:执行SQL语句
*/


/*const char *sql = "CREATE TABLE db_score\
(\
ID int(4) PRIMARY KEY,\
NAME varchar(32) NOT NULL,\
SCORE int(4)\
); " ;
*/



const char *sql = "INSERT INTO db_score VALUES(1, \"ZHOULONG\", 60) ; ";

//while (1)
//{

int id;
char name[32];
int score;
//scanf("%d%s%d", &id, name, &score);
//if (id == 0)
//{
// break;
//}

//char sql_cmd[64];

//snprintf(sql_cmd,64, "INSERT INTO db_score VALUES(%d, '%s', %d) ; ", id, name, score);
//printf("%s\n", sql_cmd);

char *sql_cmd = "SELECT ID,NAME FROM db_score WHERE SCORE < 60 ; ";


char *errmsg = NULL; //用来保存错误信息

int flag = 0;
r = sqlite3_exec(db, sql_cmd, select_resp, &flag, &errmsg);
if (r != 0)
{
printf("sqlite3_exec error : %s\n", errmsg);
return -1;
}
//}

/*
step 3: 调用sqlite3_close关闭数据库连接
*/


sqlite3_close(db);//

return 0;

}