2014-12-31 6 views
0

Я очень много нового Sqlite операции, До сих пор я работал только UI + какой-то веб-службувставки в SQLite базы данных

Что я столкнулся вопрос заключается в том,

Я создаю таблицу от терминала и вставлять в него значения из Xcode, сопоставляя имя таблицы. Таблица состоит из 4 полей, из которых 2 принадлежит таблице, а 2 - это внешние ключи.

Когда я даже вставляю запрос в мое приложение 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; 
} 

Когда я NSLog значения, это дает мне правильные значения. Также, когда я запускаю тот же запрос из значения Terminal, вставлен в базу данных.

Я запускаю этот запрос в свой массив. У меня есть полный массив, и вы хотите вставить элементы в таблицу до подсчета массива.

Почему мое приложение МОРОЗИЛЬНИК, если его ошибка, то он должен идти в блок ошибок, его не туда, Так что я сталкиваюсь с трудностями в отслеживании.

Какая ошибка я совершил.

Заранее спасибо.

+0

Если это замерзает, это предполагает, что вы должны одновременно открыть какой-либо другой запрос, который блокирует этот. Мы не можем подтвердить это на основе предоставленного кода. У вас должен быть только один объект «FMDatabase» за один раз (и если вы используете его из нескольких потоков, используйте вместо него «FMDatabaseQueue»). – Rob

+0

Привет @ROb, пожалуйста, найдите мой выше код, отредактированный, надеюсь, что поможет понять, что я делаю, создавая объект FMDATABASE при запуске и работе в конце – Sagar

+0

@stallone: ​​см. Мой ниже ответ –

ответ

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; 

    } 

Его КРИОКОНСЕРВАЦИЯ потому что, когда ошибка выполнения, он закроет БД, но не вышел из цикла, поэтому в следующей итерации его попытка выполнить операцию DB, но закрыть базу данных, в предыдущей итерации уже.

+0

Я пробовал эту штуку, не помог. Фактически мой элемент управления находится в этом цикле if, если есть ошибка в соединении или создание запроса. поэтому, если ошибка обнаружена, она просто закрывает БД и возвращает элемент управления. Спасибо за это, но не помогло. – Sagar

+1

Возможно, но, тем не менее, это предложение об ошибке должно не закрывать базу данных (как это происходит, когда вы покидаете цикл) и определенно _should_ 'break'. Или продолжайте и «закройте» базу данных, но затем «return», чтобы выйти не только из цикла, но и из метода. Но не закрывайте базу данных, но оставайтесь в этом цикле. – Rob

+0

@ Роб: Спасибо за дополнительные разъяснения. Может быть, теперь его работы для @stallone. –

Смежные вопросы