我对Sqlite操作非常陌生, 到目前为止,我只运行UI +一些Web服务
我面临的问题是,
我正在从终端创建一个表,并通过匹配表名从Xcode中插入值。 该表包含4个字段,其中2个属于表,2个是外键。
即使我在那时插入Query my app FREEZES。
它不会进一步移动,不允许任何操作。
这是我的查询
-(bool)insertMatchSampleQuest:(QuestionDTO*)questionDTO
{
NSMutableArray* matchQesA=[questionDTO matchQuesA];
NSLog(@"MTQ QuestionsArray :- %@",[matchQesA description]);
NSLog(@"MTQ QuestionsArray count :- %d",[matchQesA count]);
FMDatabase* db=[SqlLiteDAOFactory createConnection];
for(int i=0;i<[matchQesA count];i++)
{
MTQuestionDTO *mTQuestionDTO =[matchQesA objectAtIndex:i];
NSLog(@"value of testsample id is :- %@",questionDTO.testsampledid);
NSLog(@"value of sampletest id is :- %@",questionDTO.sampletestid);
NSLog(@"value of MTQ Question id :- %@",mTQuestionDTO.mtq_question_id);
NSLog(@"value of MTQ Question Text :- %@",mTQuestionDTO.mtq_question_text);
[db executeUpdate:@"insert into matchquestion (testsampledID,sampletestid,mtq_question_id,mtq_question_text) values(?,?,?,?)",questionDTO.testsampledid,questionDTO.sampletestid,mTQuestionDTO.mtq_question_id,mTQuestionDTO.mtq_question_text];
if ([db hadError])
{
NSLog(@"database error");
NSLog(@"Err in inserting %d: %@", [db lastErrorCode], [db lastErrorMessage]);
[db close];
}
}
[db close];
return TRUE;
}
当我记录值时,它给了我正确的值。 此外,当我从终端值触发相同的查询时,将其插入到数据库中。
我将此查询发送到我的数组计数。 我有完整的数组,并希望将元素插入表中直到数组计数。
为什么我的应用程序冻结,如果它的错误然后它必须进入错误块,它不会去那里, 所以我很难跟踪它。
我犯了什么错误。
提前致谢。
答案 0 :(得分:1)
从以下代码中删除[db close];
:或者中断循环。
if ([db hadError])
{
NSLog(@"database error");
NSLog(@"Err in inserting %d: %@", [db lastErrorCode], [db lastErrorMessage]);
[db close]; // Remove this line, or break the loop.
break;
}
它的冻结,因为当执行错误时,它将关闭数据库但不会退出循环,这就是为什么在下一次迭代中它尝试执行数据库操作但你已经在之前的迭代中关闭了数据库。