SQLite3深入学习笔记记录(一)

一、本文包含函数列表

函数名称函数原型
sqlite3_openint sqlite3_open(const char *filename, sqlite3 **ppDb*);
sqlite3_exec int sqlite3_exec(sqlite3*, const char *sql, int *callback, void* data, char **errmsg);
sqlite3_prepareint sqlite3_prepare(sqlite3 *db, const char *zSql, int nByte, sqlite3_stmt **ppStmt, const char **pzTail );
sqlite3_prepare_v2int 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_stepint sqlite3_step(sqlite3_stmt *pStmt);
sqlite3_resetint 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_closeint sqlite3_close(sqlite3 *db);
sqlite3_errcodeint sqlite3_errcode(sqlite3 *db);
sqlite3_errmsgconst char *sqlite3_errmsg(sqlite3 *db);
sqlite3_get_tableint sqlite3_get_table(sqlite3*, const char *sql, char ***resultp, int *nrow, int *ncolumn, char **errmsg );
sqlite3_free_tablevoid sqlite3_free_table(char **result);
sqlite3_mallocvoid *sqlite3_malloc(int);
sqlite3_reallocvoid *sqlite3_realloc(void*, int);
sqlite3_freevoid sqlite3_free(void*);
//待扩充待扩充

二、部分重要参数描述(必看)

参数描述
sqlite3 **ppDbsqlite3 类型的二级指针
sqlite3 *dbsqlite3 类型的指针
const char *zSqlsql执行语句
sqlite3_stmt **ppStmtsqlite3_stmt 类型的二级指针
const char **pzTail指向sql执行语句中未使用部分
int iCol第iCol列

三、数据库宏定义、值、描述(必看)

宏定义描述
SQLITE_OK0成功
SQLITE_ERROR1Sql 错误或数据库丢失
SQLITE_INTERNAL2Sqlite 内部逻辑错误
SQLITE_PERM3拒绝访问权限
SQLITE_ABORT 4回调程序请求中止
SQLITE_BUSY5数据库文件被锁定了
SQLITE_LOCKED6数据库中的一个表被锁定了
SQLITE_NOMEM7一个 malloc ()失败了
SQLITE_READONLY8尝试写一个只读数据库
SQLITE_INTERRUPT9操作被 sqlite3_interrupt ()终止
SQLITE_IOERR10出现了某种磁盘输入输出错误
SQLITE_CORRUPT 11数据库磁盘映像格式不正确
SQLITE_NOTFOUND12未使用,表或记录没有找到
SQLITE_FULL13插入失败,因为数据库已满
SQLITE_CANTOPEN14无法打开数据库文件
SQLITE_PROTOCOL15未使用,数据库锁定协议错误
SQLITE_EMPTY 16数据库是空的
SQLITE_SCHEMA 17数据库模式改变了
SQLITE_TOOBIG18字符串或 blob 超过大小限制
SQLITE_CONSTRAINT19由于违反约束而中止
SQLITE_MISMATCH20数据类型不匹配
SQLITE_MISUSE21数据库Library使用不当
SQLITE_NOLFS22使用主机不支持的操作系统功能
SQLITE_AUTH23拒绝授权
SQLITE_FORMAT24辅助数据库格式错误
SQLITE_RANGE25sqlite3_bind函数的第二个参数超出范围
SQLITE_NOTADB26打开的文件不是数据库文件
SQLITE_ROW 100Sqlite3_step()准备好了另一行
SQLITE_DONE101Sqlite3_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 语句

五、函数使用流程

//有时间了补充

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值