sqlite很多打开一个失败

时间:2014-01-20 18:48:37

标签: ios sqlite

我在iPhone应用程序中有sqlite数据库,我存储了问题。 我得到一个问题,用户回答是或否,结果显示在第二个viewController上,当第二个viewController关闭时,我得到另一个问题。

在30-40个问题之后,一切都完美无缺,程序无法打开数据库。 if(sqlite3_open([DBPath UTF8String],& database)== SQLITE_OK) - 它失败了。

有什么答案吗?

此功能:

//从数据库中获取问题

- (void)getQuestion:(int)getQ
{
    NSLog(@"getQuestion Started");

    sqlite3 *database;

    sqlite3_stmt *compiledStatement = NULL;

    if(sqlite3_open([DBPath UTF8String], &database) == SQLITE_OK)
    {
        NSLog(@"sqlite opened");

        const char *sql = "Select QuestionID, Question from cQuestions WHERE ExerciseLinID = ? ORDER BY QuestionID LIMIT ?, 1";

        if(sqlite3_prepare_v2(database, sql, -1, &compiledStatement, NULL) != SQLITE_OK)
            NSAssert1(0, @"Error while creating detail view statement. '%s'", sqlite3_errmsg(database));

        int curExID = [[listOfExID objectAtIndex:ExSel] integerValue];
        sqlite3_bind_int(compiledStatement, 1, curExID);
        sqlite3_bind_int(compiledStatement, 2, getQ);

        if(SQLITE_DONE != sqlite3_step(compiledStatement))
        {
            NSLog(@"Got one record");

            selectedQues = sqlite3_column_int(compiledStatement, 0);

            NSLog(@"selectedQues = %i", selectedQues);

            const char *QuNam = (char *)sqlite3_column_text(compiledStatement, 1);

            if(QuNam == nil)
                NSLog(@"!!! No data found.");
            else
            {
                if( iWhat == YES )
                    _labQuestion.text = [[NSString alloc] initWithCString:QuNam encoding:NSASCIIStringEncoding];
                else
                    _labQuestionPad.text = [[NSString alloc] initWithCString:QuNam encoding:NSASCIIStringEncoding];
            }
        }
    }
    else
    {
        NSLog(@"!!! Open error. %s", sqlite3_errmsg(database));
        NSLog(@"!!! Open error. %d", sqlite3_errcode(database));
    }
    sqlite3_close(database);
}

1 个答案:

答案 0 :(得分:1)

添加一些NSLog以了解哪个是错误。

if(sqlite3_open([DBPath UTF8String], &database) == SQLITE_OK) {
    // Your Code
}
else {
    NSLog(@"sqlite3_open failed. Error:%d. %s", sqlite3_errcode(database), sqlite3_errmsg(database));
}

一个潜在的问题是你没有关闭你的数据库,你关闭它吗?

sqlite3_close(database);