sqlite3: sqlite3_step 函数

 上一篇文章中,我们通过sqlite3_prepare_v2初始化sqlite3_stmt 数据(预编译)后,就可以通过sqlite3_step函数来执行。
返回值:

SQLITE_BUSY:当前数据库不能获取数据库锁,也就不能完成相应的操作,如果执行语句是 COMMIT 或者 发生在显式的事务之外,
            我们可以重复尝试,而如果不是,则需要回退。

SQLITE_DONE:意味着sql语句执行完成,并且成功。一旦执行成功后,sqlite3_step()就不应该被再次调用执行,除非我们使用
            sqlite3_reset()重置 sqlite3_stmt 数据。

SQLITE_ROW: 这个比较常用,当我们的sql语句是 读命令,比如"SELECT* FROM...",返回的数据必然是很多,而且是很多行,
            重点,每次只返回一行,并且函数返回值为 SQLITE_ROW,所以我们也需要重复调用sqlite3_step函数,当所有参数
            返回完成后,sqlite3_step返回 SQLITE_DONE.

SQLITE_ERR: 表示返回 run-time 错误。

SQLITE_MISUSE: 表示该函数实例被滥用,不合适,比如sqlite_stmt结构已经被销毁了。

我们在实际的使用过程中,SQLITE_DONE和SQLITE_ROW比较常用。

`sqlite3_step` 是 SQLite 数据库 API 的一个函数,用于执行 SQL 语句的下一步操作。它是 SQLite 执行 SQL 语句的核心函数之一。 在 C/C++ ,使用 SQLite 时,可以通过以下步骤来执行 SQL 语句: 1. 准备 SQL 语句:使用 `sqlite3_prepare_v2` 函数准备要执行的 SQL 语句。这个函数将 SQL 语句编译为一个准备好的语句对象。 2. 执行 SQL 语句:使用 `sqlite3_step` 函数执行准备好的语句对象。它会逐步执行 SQL 语句,每次调用都会执行一步操作。 - 如果返回 `SQLITE_ROW`,表示查询结果集有一行数据可用。可以使用其他相关函数(如 `sqlite3_column_int`、`sqlite3_column_text`)来获取该行数据的具体值。 - 如果返回 `SQLITE_DONE`,表示 SQL 语句已经执行完毕,没有更多的结果集或行可用。 - 如果返回其他错误码(如 `SQLITE_ERROR`),表示出现了错误。 3. 完成和清理:在完成所有操作后,使用 `sqlite3_finalize` 函数清理和释放准备好的语句对象。 以下是一个简单的示例代码,展示了如何使用 `sqlite3_step` 执行 SQL 查询并获取结果: ```c #include <stdio.h> #include <sqlite3.h> int main() { sqlite3 *db; sqlite3_stmt *stmt; int rc; // 打开数据库 rc = sqlite3_open(":memory:", &db); if (rc != SQLITE_OK) { fprintf(stderr, "无法打开数据库: %s\n", sqlite3_errmsg(db)); return 1; } // 准备查询语句 const char *sql = "SELECT name, age FROM students"; rc = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL); if (rc != SQLITE_OK) { fprintf(stderr, "无法准备查询语句: %s\n", sqlite3_errmsg(db)); return 1; } // 执行查询 while ((rc = sqlite3_step(stmt)) == SQLITE_ROW) { const char *name = (const char *)sqlite3_column_text(stmt, 0); int age = sqlite3_column_int(stmt, 1); printf("姓名: %s, 年龄: %d\n", name, age); } // 检查执行结果 if (rc != SQLITE_DONE) { fprintf(stderr, "执行查询错误: %s\n", sqlite3_errmsg(db)); return 1; } // 清理和关闭数据库 sqlite3_finalize(stmt); sqlite3_close(db); return 0; } ``` 在上面的示例,我们首先打开了一个内存SQLite 数据库,并准备了一个查询语句。然后,使用 `sqlite3_step` 循环执行查询,直到结果集没有更多的行。在每次循环,我们使用 `sqlite3_column_text` 和 `sqlite3_column_int` 来获取查询结果的具体值。最后,我们清理并关闭了数据库连接。 需要注意的是,以上只是一个简单的示例,实际使用时可能需要进行更多的错误处理和参数检查。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值