代码之家  ›  专栏  ›  技术社区  ›  Suresh Varma

数据库已锁定-sqlite3

  •  2
  • Suresh Varma  · 技术社区  · 15 年前

    -(无效)DropCategories{

            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'
    
    1 回复  |  直到 13 年前
        1
  •  3
  •   MPelletier    15 年前

    你的电话 sqlite3_finalize 似乎有评论。完全调用 sqlite3_prepare_v2 后面通常是 sqlite_step 然后 sqlite3完成 . 你能试试吗 sqlite3_reset ?

    edit:for posterity:asker找到了真正的原因,数据库被另一个对象锁定。以上功能正常。

    推荐文章