iPhone SQLite Crash sqlite3_last_insert_rowid or sqlite3_clo



使用以下代码插入到我的SQLite数据库中,我的日志中出现了两次崩溃 - 代码大部分时间都运行良好,但显然存在导致崩溃的错误。

它在sqlite3_last_insert_rowid或sqlite3_close上崩溃,EXC_BAD_ACCESS(我持有对 SMSDatabase 的引用,它在一个单例中,不确定为什么会被解除分配)和 SIGABRT(内存问题?

- (NSInteger)query:(NSString *)query {
    NSInteger lastRowID = 0;
        if (sqlite3_open([self.databasePath UTF8String], &smsDatabase) == SQLITE_OK)
        {                
            sqlite3_stmt *statement = nil;
            const char *sql = [query UTF8String];
            if (sqlite3_prepare_v2(smsDatabase, sql, -1, &statement, NULL) == SQLITE_OK) {
                if (sqlite3_step(statement) == SQLITE_DONE)
                {
                    lastRowID = sqlite3_last_insert_rowid(smsDatabase);
                }
            }
            sqlite3_finalize(statement);
        }
    sqlite3_close(smsDatabase);
    return lastRowID;
}

我哪里出错了?

sqlite3_close(smsDatabase); - 这不是在你的if语句之外吗,这意味着你正在关闭一个可能从未打开过的数据库?

最新更新