我在for循环中插入了超过42000个数据并且它正常工作了一段时间,就像它插入了2000多个数据但在此之后崩溃了无法打开数据库档案
这是插入代码
这是连接代码
在循环中调用insertReceiptReport
。我是iOS新手,这就是为什么不确定我错过了什么。提前谢谢。
答案 0 :(得分:1)
您可以使用以下代码在单个交易中插入多行
char* error;
sqlite3_exec(mDb, "BEGIN TRANSACTION", NULL, NULL, &error);
char buffer[] = "INSERT INTO example VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7)";
sqlite3_stmt* stmt;
sqlite3_prepare_v2(mDb, buffer, strlen(buffer), &stmt, NULL);
for (unsigned i = 0; i < mVal; i++) {
std::string id = getID();
sqlite3_bind_text(stmt, 1, id.c_str(), id.size(), SQLITE_STATIC);
sqlite3_bind_double(stmt, 2, getDouble());
sqlite3_bind_double(stmt, 3, getDouble());
sqlite3_bind_double(stmt, 4, getDouble());
sqlite3_bind_int(stmt, 5, getInt());
sqlite3_bind_int(stmt, 6, getInt());
sqlite3_bind_int(stmt, 7, getInt());
if (sqlite3_step(stmt) != SQLITE_DONE) {
printf("Commit Failed!\n");
}
sqlite3_reset(stmt);
}
sqlite3_exec(mDb, "COMMIT TRANSACTION", NULL, NULL, &error);
sqlite3_finalize(stmt);
由此BEGIN
&amp; COMMIT
您可以在DB中插入多行的事务。
有关详细信息,请参阅此链接:Bulk Row Insert
修改强>
要检查数据是否已经更新行要求,您可以使用以下插入查询:
INSERT OR REPLACE INTO <TableName> VALUES ()
注意:只有在表格中有PRIMARY KEY时,上述查询才有效。
希望这有助于解决您的问题。