sqlite3 循环执行插入语句带参数
时间: 2024-09-19 17:02:18 浏览: 31
SQLite是一个轻量级的关系型数据库管理系统,适合嵌入式应用。如果你想在SQLite中循环执行带有参数的插入语句,你可以使用`sqlite3_exec()`函数配合一个循环来完成。以下是一个简单的示例,展示了如何创建一个循环来插入一系列记录:
```cpp
#include <sqlite3.h>
#include <vector>
#include <string>
// 假设我们有一个数据结构或容器,存储要插入的数据
std::vector<std::pair<int, std::string>> data_to_insert = {
{1, "Value1"},
{2, "Value2"},
// 更多数据...
};
// SQLite3上下文
sqlite3* db;
int rc;
// 函数用于执行SQL(并处理结果)
static int callback(void* data, int num_rows, char** row_data, char** col_names) {
// 如果有错误,这里可以处理
if (num_rows != SQLITE_OK) {
// 错误处理...
return 0;
}
// ...
return sqlite3_column_count(*row_data);
}
// 打开或连接到数据库(假设已经打开过了)
rc = sqlite3_exec(db, "BEGIN TRANSACTION;", NULL, 0, &db_error);
// 插入数据的循环
for (const auto& entry : data_to_insert) {
const char* insert_query = "INSERT INTO your_table (id, value) VALUES (?, ?)";
sqlite3_stmt* stmt;
rc = sqlite3_prepare_v2(db, insert_query, -1, &stmt, NULL);
if (rc == SQLITE_OK) {
sqlite3_bind_int(stmt, 1, entry.first);
sqlite3_bind_text(stmt, 2, entry.second.c_str(), entry.second.length(), SQLITE_TRANSIENT);
rc = sqlite3_step(stmt); // 执行插入操作
if (rc != SQLITE_DONE) {
// 处理错误...
}
sqlite3_finalize(stmt); // 关闭准备好的语句
} else {
// 准备阶段错误处理...
}
}
// 提交事务(如果所有插入都成功)
if (rc == SQLITE_OK) {
rc = sqlite3_exec(db, "COMMIT;", NULL, 0, &db_error);
} else if (rc == SQLITE_BUSY) {
// 如果因为并发导致忙,你可以选择重试、等待或回滚事务
// ...
}
// 最后记得关闭连接
sqlite3_close(db);
阅读全文