sqlite3借用vector批量加入的代码
时间: 2023-04-05 21:04:40 浏览: 160
我可以回答这个问题。以下是一个示例代码:
```c++
#include <iostream>
#include <vector>
#include <sqlite3.h>
int main() {
sqlite3* db;
int rc = sqlite3_open("test.db", &db);
if (rc != SQLITE_OK) {
std::cerr << "Failed to open database: " << sqlite3_errmsg(db) << std::endl;
sqlite3_close(db);
return 1;
}
std::vector<std::string> values = {"value1", "value2", "value3"};
sqlite3_stmt* stmt;
rc = sqlite3_prepare_v2(db, "INSERT INTO my_table (my_column) VALUES (?)", -1, &stmt, nullptr);
if (rc != SQLITE_OK) {
std::cerr << "Failed to prepare statement: " << sqlite3_errmsg(db) << std::endl;
sqlite3_close(db);
return 1;
}
for (const auto& value : values) {
rc = sqlite3_bind_text(stmt, 1, value.c_str(), -1, SQLITE_TRANSIENT);
if (rc != SQLITE_OK) {
std::cerr << "Failed to bind value: " << sqlite3_errmsg(db) << std::endl;
sqlite3_finalize(stmt);
sqlite3_close(db);
return 1;
}
rc = sqlite3_step(stmt);
if (rc != SQLITE_DONE) {
std::cerr << "Failed to execute statement: " << sqlite3_errmsg(db) << std::endl;
sqlite3_finalize(stmt);
sqlite3_close(db);
return 1;
}
rc = sqlite3_reset(stmt);
if (rc != SQLITE_OK) {
std::cerr << "Failed to reset statement: " << sqlite3_errmsg(db) << std::endl;
sqlite3_finalize(stmt);
sqlite3_close(db);
return 1;
}
}
sqlite3_finalize(stmt);
sqlite3_close(db);
return 0;
}
```
这个代码使用了 SQLite3 C API 来向数据库中的一个表中插入多个值。它使用了一个 `std::vector` 来存储要插入的值,然后使用了一个循环来遍历这个向量并插入每个值。在循环中,它使用了 `sqlite3_prepare_v2` 函数来准备一个 SQL 语句,然后使用 `sqlite3_bind_text` 函数来绑定值,最后使用 `sqlite3_step` 函数来执行语句。如果执行成功,它会重置语句并继续循环。如果执行失败,它会输出错误信息并退出程序。最后,它会释放语句和数据库句柄并返回 0。
阅读全文