
C中sqlite3你知多少
开发客户端时,我需要使用数据库,因此我选择了一个轻量级的sqlite数据库进行研究,今天,我将与您分享我总结的SQLite使用文档。
源码下载
交叉编译
按顺序执行上述命令后sqlite的链接库和头文件等就会出现在prefix目录下
api使用
基本的使用流程
sqlite3_open()->sqlite3_prepare_v2()->sqlite3_step()->sqlite3_column()->sqlite3_finalize()->sqlite3_close()
具体介绍:
一般使用sqlite3_prepare_v2()都是和sqlite3_bind_xxx()系列函数一起使用,例如执行插入语句,使用sqlite3_bind_xxx()可以动态绑定某些参数的值,后续给出示例代码。
int sqlite3_step(sqlite3_stmt*);
执行数据库语句
int sqlite3_reset(sqlite3_stmt *pStmt);
重置数据库上下文,当需要重新bind参数时可以使用这个函数,避免多次prepare。
int sqlite3_finalize(sqlite3_stmt *pStmt);
删除数据库语句的上下文,调用了sqlite3_prepare_v2()后无论成功失败都需要调用,避免内存泄漏。
int sqlite3_close(sqlite3 *);
关闭数据库
在执行查询操作时,可能结果不止一条,那sqlite3_step()函数就会返回SQLITE_ROW直到所有结果都被查询到会返回SQLITE_DONE,这里每次sqlite3_step()返回SQLITE_ROW后都需要再次调用返回下一次查询的结果。
在一些简单的场景下也可以使用sqlite3的wrapper函数
主要有sqlite3_exec()和sqlite3_get_table()函数,相当于调用了sqlite3_prepare_v2()->sqlite3_step()->sqlite3_finalize()这个流程。
区别是sqlite3_exec()在查询中需要添加回调函数,sqlite3_get_table()主要用在查询上,没有回调,会把查询到的结果存到一块地址。
注意事项
sqlite3-column-text()等函数返回的地址不需要自己free,sqlite会在调用sqlite3_step() or sqlite3_reset() or sqlite3_finalize()时自动释放
如何设置自增字段
字段是integer 的primary key就会自增
如上代码,字段a就会自增,最大值是9223372036854775807,如果insert超过了这个数量,就会返回SQLITE_FULL错误,但90%的数据库行数可能不会超过这个数量。
示例代码
有问题,欢迎私信或留言
