sqlite 批量插入 c++
时间: 2024-09-06 22:04:57 浏览: 69
C语言实现SQLite的批量插入及性能对比
5星 · 资源好评率100%
SQLite 是一个轻量级的嵌入式数据库系统,非常适合资源受限的环境。在 C++ 中进行 SQLite 批量插入可以通过以下步骤实现:
1. 首先确保你的系统已经安装了 SQLite,并且你的 C++ 环境配置了相应的库文件。
2. 打开数据库连接:使用 `sqlite3_open` 函数打开或创建一个数据库文件。
3. 准备 SQL 插入语句:编写包含占位符(如 `?`)的 SQL 插入语句,以便后续执行参数化查询。
4. 打开事务:为了提高批量插入的效率,可以先开启一个事务,这样可以在完成所有插入后再一次性提交。
5. 执行批量插入操作:通过循环,使用 `sqlite3_prepare_v2` 和 `sqlite3_bind_*` 系列函数绑定参数,然后使用 `sqlite3_step` 执行插入。重复此过程直到所有数据被插入。
6. 提交事务:完成所有插入操作后,通过 `sqlite3_commit` 提交事务。
7. 关闭数据库:最后,使用 `sqlite3_close` 关闭数据库连接。
示例代码可能如下所示:
```cpp
#include <sqlite3.h>
#include <iostream>
int main() {
sqlite3 *db;
char *errMsg = nullptr;
const char *sql;
int rc;
// 打开数据库连接
rc = sqlite3_open("example.db", &db);
if (rc) {
std::cerr << "无法打开数据库: " << sqlite3_errmsg(db) << std::endl;
return 1;
}
// 开启事务
if (sqlite3_exec(db, "BEGIN TRANSACTION;", nullptr, nullptr, &errMsg) != SQLITE_OK) {
std::cerr << "事务开启失败: " << errMsg << std::endl;
sqlite3_free(errMsg);
sqlite3_close(db);
return 1;
}
// 准备 SQL 插入语句
sql = "INSERT INTO table_name (column1, column2) VALUES (?, ?);";
// 执行批量插入操作
sqlite3_stmt *stmt;
if (sqlite3_prepare_v2(db, sql, -1, &stmt, nullptr) != SQLITE_OK) {
std::cerr << "准备语句失败: " << sqlite3_errmsg(db) << std::endl;
sqlite3_close(db);
return 1;
}
for (int i = 0; i < 1000; ++i) { // 假设我们要插入1000条数据
sqlite3_bind_int(stmt, 1, i); // 绑定第一个参数
sqlite3_bind_text(stmt, 2, "data", -1, SQLITE_TRANSIENT); // 绑定第二个参数
// 执行插入操作
rc = sqlite3_step(stmt);
if (rc != SQLITE_DONE) {
std::cerr << "插入失败: " << sqlite3_errmsg(db) << std::endl;
}
sqlite3_reset(stmt); // 重置语句
}
// 提交事务
if (sqlite3_exec(db, "COMMIT;", nullptr, nullptr, &errMsg) != SQLITE_OK) {
std::cerr << "事务提交失败: " << errMsg << std::endl;
sqlite3_free(errMsg);
}
// 清理
sqlite3_finalize(stmt);
sqlite3_close(db);
return 0;
}
```
在上面的示例代码中,我们创建了一个名为 `table_name` 的表,并且使用了两个参数进行批量插入。这里我们假设要插入1000条数据,你可以根据实际需要调整循环的次数。
阅读全文