iPhone SQLite崩溃sqlite3_last_insert_rowid或sqlite3_close。

时间:2013-09-30 17:44:10

标签: iphone ios objective-c sqlite

我在我的日志中出现了两个崩溃,使用以下代码插入到我的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;
}

我哪里错了?

1 个答案:

答案 0 :(得分:0)

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