我有一个方法可以从自定义对象插入我的sqlite数据库:
- (void)insertCustomEntity:(CustomEntity *)customEntity
{
NSString *filePath = [FileMngr copyDatabaseToDocuments];
sqlite3 *database;
if (sqlite3_open([filePath UTF8String], &database) == SQLITE_OK) {
const char *sqlStatement = "INSERT OR REPLACE INTO Entities (id, type, timestamp, result) VALUES (?, ?, ?, ?)";
sqlite3_stmt *compiledStatement;
NSLog(@"Could not prepare statement: %s\n", sqlite3_errmsg(database));
if (sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {
sqlite3_bind_int(compiledStatement, 1, customEntity.id);
sqlite3_bind_int(compiledStatement, 2, customEntity.type);
sqlite3_bind_int64(compiledStatement, 3, customEntity.timestamp);
sqlite3_bind_int(compiledStatement, 4, customEntity.result);
}
if(sqlite3_step(compiledStatement) == SQLITE_DONE) {
}
else {
NSLog(@"Step: %d\n", sqlite3_step(compiledStatement));
}
}
sqlite3_finalize(compiledStatement);
}
sqlite3_close(database);
}
我已经进行了一段时间的测试,数据正在插入,但突然停止了,我现在在第二个NSLog
获得了一个5步代码。如果之前有效,为什么会发生这种情况呢?我在一些帖子中尝试了几个选项,比如将sqlite3_step(compiledStatement)
放在sqlite3_prepare_v2
内,但我一直无法插入。我做错了什么?
提前致谢
答案 0 :(得分:1)
我不确定,但看起来你的一些牙套是不匹配的?无论如何,错误代码5表示您的数据库已被锁定。
http://www.sqlite.org/c3ref/c_abort.html
检查是否有其他内容正在访问您的数据库(或者您的数据库在某些情况下没有关闭,在这种情况下您的代码需要更改)。请尝试以下解决方案来解决它: -