还记得我们上期讲了什么吗,没错,我们上期讲到了sqlite的使用,通过对比sqlite3和MySQL进一步了解了sqlite的使用场景,然后我们也讲了如何通过在linux终端执行命令行的方式去操作数据库增,删,改,查。我想大家应该对其有了一定的了解,今天我们来了解如何通过代码的方式去实现它的,增,删,改,查。
*上期我们说过的在写代码前我们还需要sqlite代码,这里已上传我的远程仓库,大家克隆/下载即可。
1,打开和关闭数据库
首先,我们想去操作数据库,就必须去打开它,才能进行下一步操作,当我们结束之后,是不是应该
,咋们直接看函数原型,以及其参数代表的含义。
*******************************打开数据库******************************** 函数原型:int sqlite3_open(const char *filename, sqlite3 **ppDb); 参数1:·filename:数据库文件的名称或路径 参数2·ppDb:用于存储指向连接对象的指针的指针 返回值:打开数据库成功,返回 SQLITE_OK。 打开数据库失败,返回一个非零的错误代码,可以通过调用 sqlite3_errmsg 函数获取错误消息。 *******************************关闭数据库********************************* 函数原型:int sqlite3_close(sqlite3* db); 参数:db:要关闭数据库的连接对象 返回值:关闭数据库连接成功,返回 SQLITE_OK。 关闭数据库连接失败,返回一个非零的错误代码,可以通过调用 sqlite3_errmsg 函数获取错误消息
我想这样介绍大家应该没有问题了吧,如果有,那我们直接以代码为例吧。
这还拿不下你?
2,执行sql语句函数
*sqlite3_exec 是 SQLite3 C API 中用于执行 SQL 语句的函数。它可以执行任意的 SQL 命令,并且支持回调函数来处理查询结果。
int sqlite3_exec(sqlite3* db, const char *sql, int (*callback)(void*, int, char**, char**), void* data, char **errmsg); 参数说明: db:SQLite3 数据库连接对象指针。 sql:要执行的 SQL 语句,可以是查询、更新或其他操作。 callback:一个回调函数,用于处理查询结果。该回调函数会被传递查询结果的每一行数据。 data:传递给回调函数的额外数据指针。 errmsg:用于存储错误信息的指针,如果执行过程中出现错误,会将错误信息存储在这里。 返回值: 返回一个表示执行结果的整数值,通常是 SQLITE_OK(0)表示执行成功。
我们通过这个函数,以及上一期我们讲到的在linux终端执行的SQL命令行就已经可以实现其增,删,改,查了。
3,获取执行错误信息
*sqlite3_errmsg 是 SQLite3 C API 中的一个函数,用于获取与最近发生的数据库连接相关的错误消息。
const char *sqlite3_errmsg(sqlite3*); 参数说明: db:SQLite3 数据库连接对象指针。 返回值: 返回一个指向常量字符串的指针,该字符串包含了与最近发生的数据库连接相关的错误消息。
4,获取查询结果
*sqlite3_get_table 是 SQLite3 C API 中用于执行查询并将结果存储在二维数组中的函数。
int sqlite3_get_table( sqlite3* db, // 打开数据库的连接对象 const char *sql, // 要执行的SQL查询语句 char ***resultp, // 用于存储结果的二维数组 int *nrow, // 存储结果行数的指针 int *ncolumn, // 存储结果列数的指针 char **errmsg // 用于存储错误信息的指针 ); 参数说明: db:SQLite3 数据库连接对象指针。 sql:要执行的 SQL 查询语句。 resultp:指向一个指针的指针,用于存储查询结果的二维数组。 nrow:一个指针,用于存储结果行数。 ncolumn:一个指针,用于存储结果列数。 errmsg:用于存储错误信息的指针。 返回值: 返回一个整数,表示执行结果,通常是 SQLITE_OK(0)表示执行成功。
而 sqlite3_free_table 则用于释放由 sqlite3_get_table 分配的内存空间。
void sqlite3_free_table(char **result); result:指向结果数组的指针。
话不多说,我们直接
。掀桌子跑路楼。
后续你们可以自己去体会一下。
当然,我们还有一个执行SQL的API
int sqlite3_prepare_v2( sqlite3 *db, /* 数据库句柄 */ const char *zSql, /* SQL 查询语句 */ int nByte, /* 将要使用的字节数 */ sqlite3_stmt **ppStmt, /* 编译后生成的 SQL 程序句柄 */ const char **pzTail /* 未编译部分的 SQL 查询语句 */ ); db:SQLite 数据库连接对象指针。 zSql:要编译的 SQL 语句,以 UTF-8 编码。 nByte:SQL 语句的最大长度(以字节为单位),如果为 -1 则表示以零结尾的字符串。 ppStmt:传递一个指向 sqlite3_stmt* 类型指针的指针,用于接收编译后的语句对象。 pzTail:指向未使用的 SQL 语句部分的指针。 成功调用该函数将返回 SQLITE_OK,并且 ppStmt 指向一个准备好的语句对象,可以通过该对象执行 SQL 语句。记得在使用完毕后要调用 sqlite3_finalize 函数释放语句对象占用的资源。
上代码吧
本期的sqlite3的使用圆满结束喽。