一、本文包含函数列表
函数名称 | 函数原型 |
---|---|
sqlite3_open | int sqlite3_open(const char *filename, sqlite3 **ppDb*); |
sqlite3_exec | int sqlite3_exec(sqlite3*, const char *sql, int *callback, void* data, char **errmsg); |
sqlite3_prepare | int sqlite3_prepare(sqlite3 *db, const char *zSql, int nByte, sqlite3_stmt **ppStmt, const char **pzTail ); |
sqlite3_prepare_v2 | int sqlite3_prepare_v2(sqlite3 *db,const char *zSql,int nByte,sqlite3_stmt **ppStmt, const char **pzTail); |
sqlite3_bind_* | //这个为函数格式,不能直接用,下面的函数可以直接调用 int sqlite3_bind_*(sqlite3_stmt*, int, const char*, int n,void(*)(void*)); |
int sqlite3_bind_double(sqlite3_stmt*, int, double); | |
int sqlite3_bind_int(sqlite3_stmt*, int, int); | |
int sqlite3_bind_int64(sqlite3_stmt*, int, sqlite_int64); | |
int sqlite3_bind_null(sqlite3_stmt*, int); | |
int sqlite3_bind_text(sqlite3_stmt*, int, const char*, int n, void(*)(void*)); | |
int sqlite3_bind_text16(sqlite3_stmt*, int, const void*, int, void(*)(void*)); | |
int sqlite3_bind_value(sqlite3_stmt*, int, const sqlite3_value*); | |
sqlite3_step | int sqlite3_step(sqlite3_stmt *pStmt); |
sqlite3_reset | int sqlite3_reset(sqlite3_stmt *pStmt); |
sqlite3_colum //获取列内容 | //利用这个系列的函数,获取列的值 |
int sqlite3_column_bytes(sqlite3_stmt*, int iCol); | |
int sqlite3_column_bytes16(sqlite3_stmt*, int iCol); | |
double sqlite3_column_double(sqlite3_stmt*, int iCol); | |
int sqlite3_column_int(sqlite3_stmt*, int iCol); | |
sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol); | |
const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol); | |
const void *sqlite3_column_text16(sqlite3_stmt*, int iCol); | |
int sqlite3_column_type(sqlite3_stmt*, int iCol); | |
int sqlite3_column_numeric_type(sqlite3_stmt*, int iCol); | |
sqlite3_value *sqlite3_column_value(sqlite3_stmt*, int iCol); | |
sqlite3_colum //获取列参数 | |
//获取列数 int sqlite3_column_count(sqlite3_stmt *pStmt); | |
//获取第i列列名 const char *sqlite3_column_name(sqlite3_stmt*,int i); | |
//返回第i列数据类型 const char *sqlite3_column_decltype(sqlite3_stmt *, int i); | |
sqlite3_finalize | int sqlite3_finalize(sqlite3_stmt *pStmt); |
sqlite3_close | int sqlite3_close(sqlite3 *db); |
sqlite3_errcode | int sqlite3_errcode(sqlite3 *db); |
sqlite3_errmsg | const char *sqlite3_errmsg(sqlite3 *db); |
sqlite3_get_table | int sqlite3_get_table(sqlite3*, const char *sql, char ***resultp, int *nrow, int *ncolumn, char **errmsg ); |
sqlite3_free_table | void sqlite3_free_table(char **result); |
sqlite3_malloc | void *sqlite3_malloc(int); |
sqlite3_realloc | void *sqlite3_realloc(void*, int); |
sqlite3_free | void sqlite3_free(void*); |
//待扩充 | 待扩充 |
二、部分重要参数描述(必看)
参数 | 描述 |
---|---|
sqlite3 **ppDb | sqlite3 类型的二级指针 |
sqlite3 *db | sqlite3 类型的指针 |
const char *zSql | sql执行语句 |
sqlite3_stmt **ppStmt | sqlite3_stmt 类型的二级指针 |
const char **pzTail | 指向sql执行语句中未使用部分 |
int iCol | 第iCol列 |
三、数据库宏定义、值、描述(必看)
宏定义 | 值 | 描述 |
---|---|---|
SQLITE_OK | 0 | 成功 |
SQLITE_ERROR | 1 | Sql 错误或数据库丢失 |
SQLITE_INTERNAL | 2 | Sqlite 内部逻辑错误 |
SQLITE_PERM | 3 | 拒绝访问权限 |
SQLITE_ABORT | 4 | 回调程序请求中止 |
SQLITE_BUSY | 5 | 数据库文件被锁定了 |
SQLITE_LOCKED | 6 | 数据库中的一个表被锁定了 |
SQLITE_NOMEM | 7 | 一个 malloc ()失败了 |
SQLITE_READONLY | 8 | 尝试写一个只读数据库 |
SQLITE_INTERRUPT | 9 | 操作被 sqlite3_interrupt ()终止 |
SQLITE_IOERR | 10 | 出现了某种磁盘输入输出错误 |
SQLITE_CORRUPT | 11 | 数据库磁盘映像格式不正确 |
SQLITE_NOTFOUND | 12 | 未使用,表或记录没有找到 |
SQLITE_FULL | 13 | 插入失败,因为数据库已满 |
SQLITE_CANTOPEN | 14 | 无法打开数据库文件 |
SQLITE_PROTOCOL | 15 | 未使用,数据库锁定协议错误 |
SQLITE_EMPTY | 16 | 数据库是空的 |
SQLITE_SCHEMA | 17 | 数据库模式改变了 |
SQLITE_TOOBIG | 18 | 字符串或 blob 超过大小限制 |
SQLITE_CONSTRAINT | 19 | 由于违反约束而中止 |
SQLITE_MISMATCH | 20 | 数据类型不匹配 |
SQLITE_MISUSE | 21 | 数据库Library使用不当 |
SQLITE_NOLFS | 22 | 使用主机不支持的操作系统功能 |
SQLITE_AUTH | 23 | 拒绝授权 |
SQLITE_FORMAT | 24 | 辅助数据库格式错误 |
SQLITE_RANGE | 25 | sqlite3_bind函数的第二个参数超出范围 |
SQLITE_NOTADB | 26 | 打开的文件不是数据库文件 |
SQLITE_ROW | 100 | Sqlite3_step()准备好了另一行 |
SQLITE_DONE | 101 | Sqlite3_step()已经执行完毕 |
四、相关函数详解
1、sqlite3_open
int sqlite3_open(const char *filename, sqlite3 **ppDb*); | |
---|---|
参数 | const char *filename//数据库路径 |
sqlite3 **ppDb//数据库二级指针 | |
返回值 | 返回类型为int型,数值内容对应第三部分中宏定义表 成功返回SQLITE_OK;失败返回其他值 |
用例 | sqlite3 *db; char *dbPath= "f:/test.db"; sqlite3_open(dbPath,&db); |
功能描述 | 打开一个sqlite数据库文件的连接并且返回一个数据库连接对象 |
2、sqlite3_prepare_v2
int sqlite3_prepare_v2(sqlite3 *db, const char *zSql, int nByte, sqlite3_stmt **ppStmt, const char **pzTail ); | |
---|---|
参数 | sqlite3 *db//成功打开的数据库句柄 |
const char *zSql//UTF8编码的 SQL 语句 | |
int nByte//如果nByte小于0,则函数取出zSql中从开始到第一个’0‘终止符的内容;如果nByte不是负的,那么它就是这个函数能从zSql中读取的字节数的最大值。 | |
sqlite3_stmt **ppStmt//输出:预编译语句句柄 | |
const char **pzTail//输出:指向 sql 语句中未使用的部分 | |
返回值 | 成功返回SQLITE_OK;失败返回错误码,并且ppStmt为NULL |
用例 | sqlite3 *db; char sql_str[100]= "数据库执行语句"; sqlite3_stmt *stmt = NULL; sqlite3_prepare_v2(db, sql_str, -1, &stmt, NULL); |
功能描述 | 将sql文本转换成一个准备语句(prepared statement)对象,同时返回这个对象的指针。 |
3、sqlite3_bind_text
int sqlite3_bind_text(sqlite3_stmt *pStmt, int n, const char *str, int strlen, void(*)(void*)); | |
---|---|
参数 | sqlite3_stmt *pStmt//编译语句 |
int n//序号,必须从1开始,从0开始会报错 | |
const char *str//字符串 | |
int strlen//字符串长度,如果strlen小于0,则函数取出str中从开始到第一个’0‘终止符的内容;如果strlen不是负的,那么它就是这个函数能从str中读取的字节数的最大值。 | |
void(*)(void*)//调用函数指针,此参数有两个常数,SQLITE_STATIC告诉sqlite3_bind_text函数字符串为常量,可以放心使用;而SQLITE_TRANSIENT会使得sqlite3_bind_text函数对字符串做一份拷贝。 | |
返回值 | 成功返回SQLITE_OK;失败返回错误码 |
用例 | sqlite3_bind_text(stmt,1,str,-1,SQLITE_STATIC); //绑定数据 |
功能描述 | 给“准备语句”绑定参数 |
4、sqlite3_step
int sqlite3_step(sqlite3_stmt *pStmt); | |
---|---|
参数 | sqlite3_stmt *pStmt//编译语句 |
返回值 | SQLITE_BUSY:忙碌. 数据库引擎无法锁定数据去完成其工作. 但可以多次尝试. SQLITE_DONE:完成. sql 语句已经被成功地执行. 在调用 sqlite_reset() 之前, 当前预编译的语句不应该被 sqlite3_step() 再次调用. SQLITE_ROW:查询时产生了结果. 此时可以通过相关的"数据访问函数(column access functions)"来取得数据. sqlite3_step() 的再一次调用将取得下一条查询结果. SQLITE_ERROR:发生了错误. 此时可以通过 sqlite3_errmmsg() 取得相关的错误信息. sqlite3_step() 不能被再次调用. SQLITE_MISUSE:不正确的库的使用. 该函数使用不当. |
用例 | sqlite3_step(stmt); |
功能描述 | 当一条语句被 sqlite3_prepare() 或其相关的函数预编译后, sqlite3_step() 必须被调用一次或多次来评估该预编译语句. |
5、sqlite3_reset
int sqlite3_reset(sqlite3_stmt *pStmt); | |
---|---|
参数 | sqlite3_stmt *pStmt//编译语句 |
返回值 | SQLITE_BUSY表示暂时无法执行操作 SQLITE_DONE表示操作执行完毕 SQLITE_ROW表示执行完毕并且有返回(执行select语句时)此时,我们需要对查询结果进行处理,SQLITE3提供sqlite3_column_*系列函数。 |
用例 | sqlite3_reset(stmt); |
功能描述 | sqlite3_reset用于重置一个准备语句对象到它的初始状态,然后准备被重新执行。 |
6、sqlite3_finalize
int sqlite3_finalize(sqlite3_stmt *pStmt);; | |
---|---|
参数 | sqlite3_stmt *pStmt//编译语句 |
返回值 | 成功返回SQLITE_OK;失败返回错误码 |
用例 | sqlite3_finalize(stmt); |
功能描述 | 销毁前面被sqlite3_prepare创建的准备语句,每个准备语句都必须使用这个函数去销毁以防止内存泄露。 |
7、sqlite3_close
int sqlite3_close( sqlite3* pDB);; | |
---|---|
参数 | sqlite3* pDB//指向数据库的数据库指针 |
返回值 | SQLITE_OK:成功关闭; SQLITE_BUSY:关闭时还有未完成的预编译语句或二进制句柄 |
用例 | sqlite3 *db; sqlite3_close(db); |
功能描述 | 关闭前面使用sqlite3_open打开的数据库连接 |
8、sqlite3_exec
int sqlite3_exec(sqlite3*, const char *sql, int *callback, void* data, char **errmsg); | |
---|---|
参数 | sqlite3* pDB//指向数据库的数据库指针 |
const char* sql //被执行的 SQL 语句 | |
int (*callback)(void*,int,char**,char**) //执行/查询回调函数 | |
void* pvoid //传递给回调函数的第一个参数 | |
char**errmsg //错误输出信息 | |
返回值 | |
用例 | sqlite3 *db; sqlite3_close(db); |
功能描述 | 用来执行若干条 SQL 语句 |
五、函数使用流程
//有时间了补充