这是我正在使用的表的架构
CREATE TABLE clauses(id INTEGER PRIMARY KEY, content BLOB)
我想在该表中插入大量记录。我在想类似的事情
void insert_records(sqlite3* db) {
int clause[CLAUSE_SIZE];
char sql[] = "INSERT INTO clauses(content) VALUES(?)";
sqlite3_stmt* stmt = NULL;
if (sqlite3_prepare(db, sql, -1, &stmt, NULL) != SQLITE_OK) {
fprintf(stderr, "error in prepare : %s\n", sqlite3_errmsg(db));
exit(1);
}
if (sqlite3_bind_blob(stmt, 1, clause, sizeof(clause), SQLITE_STATIC) != SQLITE_OK) {
fprintf(stderr, "error in bind : %s\n", sqlite3_errmsg(db));
exit(1);
}
for (int i = 0 ; i < nb_clauses ; i++) {
gen_clause(clause);
if (sqlite3_step(stmt) != SQLITE_DONE) {
fprintf(stderr, "error in step : %s\n", sqlite3_errmsg(db));
exit(1);
}
}
sqlite3_finalize(stmt);
}
但这不起作用:仅插入第一项,在第二次迭代中,程序因“步骤错误:未知错误”而终止。
问题是什么?
最佳答案
您必须调用 sqlite3_reset在您可以重新执行准备好的语句之前。
关于c - 如何使用 sqlite3 C API 插入多个 blob?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16965529/