Прямо сейчас я Вставка в db на основе счета. Если счетчик больше нуля, чем «SELECT» будет запущен, и мои данные будут показаны, иначе «INSERT». Прямо сейчас мой db пуст, поэтому условие переходит в раздел «INSERT» и в этом я получаю «База данных заблокирована: ERROR». Я просмотрел несколько примеров, и он сказал, что мы должны сделать завершение текущего запроса перед тем, как начать новый. Я тоже сделал это, но все же моя проблема такая же. Отправьте мой код здесь:база данных заблокирована при вводе данных ios
if (sqlite3_open(dbpath, &_contactDB) == SQLITE_OK)
{
NSString *querySQL = [NSString stringWithFormat:
@"SELECT count(*) FROM tables WHERE table_id='%d'",
table_id];
NSLog(@"fetch query is.... %@",querySQL);
const char *query_stmt = [querySQL UTF8String];
sqlite3_stmt *countstmt;
if(sqlite3_prepare_v2(_contactDB, query_stmt, -1, &countstmt, NULL) == SQLITE_OK)
{
NSLog(@"FEtch");
sqlite3_step(countstmt);
rows = sqlite3_column_int(countstmt, 0);
NSLog(@"no of rows is %d",rows);
}
sqlite3_finalize(statement);
}
if(rows>0)
{
NSLog(@"NO of rows is : %d",rows);
//if (sqlite3_open(dbpath, &_contactDB) == SQLITE_OK)
// {
NSString *querySQQL = [NSString stringWithFormat:
@"SELECT * FROM tables WHERE table_id='%d'",
table_id];
NSLog(@"fetch query is.... %@",querySQQL);
const char *query_stmmt = [querySQQL UTF8String];
if (sqlite3_prepare_v2(_contactDB,
query_stmmt, -1, &statement, NULL) == SQLITE_OK)
{
NSLog(@"yes...");
}
while (sqlite3_step(statement) == SQLITE_ROW)
{
//int i=0;
NSLog(@"yesssss...");
// NSInteger count = sqlite3_column_int(statement, 2);
//NSLog(@"Rowcount is %d",(long)count);
table_data= [[NSString alloc]
initWithUTF8String:(const char *) sqlite3_column_text(statement, 1)];
status= [[NSString alloc]
initWithUTF8String:(const char *) sqlite3_column_text(statement, 2)];
row_id= [[NSString alloc]
initWithUTF8String:(const char *) sqlite3_column_text(statement, 0)];
table_idd= [[NSString alloc]
initWithUTF8String:(const char *) sqlite3_column_text(statement, 3)];
//searchResults = [NSMutableArray arrayWithObject:namee];
NSString *finalarrayy;
//for(loop=1;loop<=z;loop++)
//{
finalarrayy=[NSString stringWithFormat:@"%@,%@,%@,%@",row_id,table_data,status,table_idd];
[stringArray addObject:table_data];
NSLog(@"Array....is...%@",stringArray);
}
[defaults setObject:stringArray forKey:@"stringarray"];
[defaults synchronize];
//}
sqlite3_finalize(statement);
}
else{
NSLog(@"INsert");
//if (sqlite3_open(dbpath, &_contactDB) == SQLITE_OK)
// {
for(i=mn; i<=o ; i++)
{
for(j=1;j<=19;j++)
{
k=i*j;
NSString *val=[NSString stringWithFormat:@"%d %@ %d %@ %d",i,@"x",j,@"=",k];
//tab_data.value=val;
[stringArray addObject:val];
NSString *insertSQLL = [NSString stringWithFormat:
@"INSERT INTO tables(table_data,status,table_id) VALUES ('%@', '%@', '%d')",
val,@"NO",table_id];
NSLog(@"sql stm. is ..%@",insertSQLL);
const char *insert_stmtt = [insertSQLL UTF8String];
sqlite3_prepare_v2(_contactDB, insert_stmtt,
-1, &statement, NULL);
if (sqlite3_step(statement) == SQLITE_DONE)
{
NSLog(@"yes");
}
else
{
NSLog(@"Error: failed to insert into the database with message '%s'.", sqlite3_errmsg(_contactDB));
}
}
}
// }
sqlite3_finalize(statement);
sqlite3_close(_contactDB);
}
PLease сообщите мне, что не так с моим кодом. Код запускается в первый раз, как если бы ничто не было в базе данных, тогда значения вставляются в db, но во второй раз, если я хочу вставить что-то новое в db, тогда его ошибка бросания «база данных заблокирована». Фактически я работает тот же код в viewdidload и о действии segmentcontrol. Для viewdidload работает нормально, но в случае segmentcontrol создается ошибка, любая идея относительно этого. Если кто-то может изменить мой код, я буду очень благодарен ему/ей.
Я думаю, что вы не копируете файл базы данных в NSDocumentDirectory – SRI
@TENSRI ... NOP всего perfect..db уже created..but значения не инертизацию в дб – codey