我在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);
}
答案 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);