2010-08-17 4 views
2

- (Недействительными) dropCategories {База данных заблокирована -sqlite3

 if (deleteCategoryStmt == nil) { 
      const char *deleteSql = "delete from tb_category"; 
      if (sqlite3_prepare_v2(database, deleteSql, -1, &deleteCategoryStmt, NULL) != SQLITE_OK) 
        NSAssert1(0,@"Error in preparing drop category statement with '%s'", sqlite3_errmsg(database)); 
      else 
        NSLog(@"NO error in creating drop categories statement"); 


     } 

     if(SQLITE_DONE != sqlite3_step(deleteCategoryStmt)) 
      NSAssert1(0, @"Error while drop category data. '%s'", sqlite3_errmsg(database)); 

    sqlite3_reset(deleteCategoryStmt); 
    //sqlite3_finalize(deleteCategoryStmt); 
    deleteCategoryStmt = nil; 
} 

вызов этой функции один раз работает нормально, но когда я его называет снова прекращает предоставление ниже исключение.

Любое предложение Почему такое происходит?

*** Assertion failure in -[Category dropCategories], /Users/rsplmac/Documents/LiteApp2/Classes/Category.m:171 
2010-08-17 14:01:06.648 LiteApp2[4335:207] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Error while drop category data. 'database is locked'' 
*** Call stack at first throw: 
(
    0 CoreFoundation      0x02429919 __exceptionPreprocess + 185 
    1 libobjc.A.dylib      0x025775de objc_exception_throw + 47 
    2 CoreFoundation      0x023e2078 +[NSException raise:format:arguments:] + 136 
    3 Foundation       0x000ce8cf -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 116 
    4 LiteApp2       0x000043ce -[Category dropCategories] + 462 
    5 LiteApp2       0x00004ba3 -[RootViewController updateMe:] + 1297 
    6 UIKit        0x002d3e14 -[UIApplication sendAction:to:from:forEvent:] + 119 
    7 UIKit        0x004db14b -[UIBarButtonItem(UIInternal) _sendAction:withEvent:] + 156 
    8 UIKit        0x002d3e14 -[UIApplication sendAction:to:from:forEvent:] + 119 
    9 UIKit        0x0035d6c8 -[UIControl sendAction:to:forEvent:] + 67 
    10 UIKit        0x0035fb4a -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 527 
    11 UIKit        0x0035e6f7 -[UIControl touchesEnded:withEvent:] + 458 
    12 UIKit        0x002f72ff -[UIWindow _sendTouchesForEvent:] + 567 
    13 UIKit        0x002d91ec -[UIApplication sendEvent:] + 447 
    14 UIKit        0x002ddac4 _UIApplicationHandleEvent + 7495 
    15 GraphicsServices     0x02c15afa PurpleEventCallback + 1578 
    16 CoreFoundation      0x0240adc4 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52 
    17 CoreFoundation      0x0236b737 __CFRunLoopDoSource1 + 215 
    18 CoreFoundation      0x023689c3 __CFRunLoopRun + 979 
    19 CoreFoundation      0x02368280 CFRunLoopRunSpecific + 208 
    20 CoreFoundation      0x023681a1 CFRunLoopRunInMode + 97 
    21 GraphicsServices     0x02c142c8 GSEventRunModal + 217 
    22 GraphicsServices     0x02c1438d GSEventRun + 115 
    23 UIKit        0x002e1b58 UIApplicationMain + 1160 
    24 LiteApp2       0x00002808 main + 102 
    25 LiteApp2       0x00002799 start + 53 
) 
terminate called after throwing an instance of 'NSException' 

ответ

3

Ваш комментарий к sqlite3_finalize, похоже, прокомментирован. За полным звонком до sqlite3_prepare_v2 обычно следует sqlite_step, затем sqlite3_finalize. Можете ли вы попробовать это, без sqlite3_reset?

EDIT: для потомков: искатель нашел реальную причину, база данных была заблокирована другим объектом. Выше функция была прекрасной.

+0

Я пробовал, но все еще не работает. До завершения приложения. Есть ли способ, чтобы я насильно разблокировал базу данных или очистил все предыдущие блокировки? Надеюсь, что может решить мою проблему. –

+0

Хммм ... вы попробовали 'sqlite3_exec'? Выполнение запроса «все-в-одном»! – MPelletier

+0

Наконец я обнаружил, что проблема связана с моим кодом. Я открыл базу данных с двумя разными объектами. Окончательно разобрал ее –

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