目录
获取sqlite3源码
c调用步骤
常用接口函数说明
例子 打开数据库,新建表,插入数据,查询数据,关闭数据库
查询数据需要在回调函数中获取
获取sqlite3源码
先下载c的sqlite3源码,https://www.sqlite.org/index.html
解压后将sqlite3.c和sqlite3.h放到自己的项目里
查看数据库文件
可以用sqliteexpert打开查看,下载请看
SQLite administration | SQLite Experthttps://www.sqliteexpert.com/download.html
c调用步骤
- 添加头文件
- 打开数据库文件,如果数据库文件不存在,则创建
- 创建表
- 增删改查
- 关闭数据库文件
常用接口函数说明
SQLite – C/C++ | 菜鸟教程 (runoob.com)https://www.runoob.com/sqlite/sqlite-c-cpp.html
- sqlite3_open(const char *filename, sqlite3 **ppDb)
- 函数作用:打开数据库文件,如果该数据库文件不存在则创建
- filename:你要打开的那个的数据库文件的路径名
- ppDb:数据库的文件句柄(类似之前所学的文件描述符)
- 返回值,成功返回0,否则非0
- sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg)
- 函数作用:执行sql语句
- sqlite3:数据库文件句柄
- sql:sql语句
- sqlite_callback:回调函数指针,将查询的结果存储到这里
- data:传入回调函数中得数据
- errmsg:错误原因
- 返回值,成功返回SQLITE_OK,否则非SQLITE_OK
- sqlite3_close(sqlite3*)
- 函数作用:关闭数据库文件
- int (*callback)(void*arg,int,char**,char**)
- arg:是sqlite3_exec第四个参数传进来得值
- int:数据库得列数,也就是多少列
- char**:每一行的信息,char data[2][256]
- char**:表示每列的标题名
例子 打开数据库,新建表,插入数据,查询数据,关闭数据库
//创建一个sqlite3空的句柄指针sqlite3 *ppDb = NULL;//数据库文件的句柄//打开数据库文件int ret = sqlite3_open("test.db",&ppDb);if(ret == 0){printf("open success\n");}else{printf("open error:%s\n",sqlite3_errmsg(ppDb));return ;}//创建表const char *sql = "create table if not exists staff(name text,age int);"; char *errmsg;//错误信息//执行ret = sqlite3_exec(ppDb,sql,NULL,NULL,&errmsg);if(ret != SQLITE_OK){printf("create table error:%s\n",errmsg);}//插入数据//准备sql语句const char *insertSql = "insert into staff values('zhang3',22);";//执行ret = sqlite3_exec(ppDb,insertSql,NULL,NULL,&errmsg);if(ret != SQLITE_OK){printf("insert error:%s\n",errmsg);}//查询//准备sql语句const char*selectSql = "select * from staff;";//执行ret = sqlite3_exec(ppDb,selectSql,callback,NULL,&errmsg);if(ret != SQLITE_OK){printf("select error:%s\n",errmsg);}//关闭数据库文件sqlite3_close(ppDb);
查询数据需要在回调函数中获取
查询到一行数据调用一次
int callback(void*arg,int column,char**data,char**feild)
{//name:zhang3 age:22//c++ qtqDebug()<<feild[0]<<":"<<data[0] <<" "<<feild[1]<<":"<<data[1];//cprintf("%s:%s %s:%s\n", feild[0], data[0], feild[1], data[1]);return 0;//返回值一定要写
}