2012-08-08 132 views
1

鎖定錯誤我工作的SQLite和在數據庫中插入值,但我正在逐漸數據庫鎖定錯誤 這裏是我的代碼數據庫在sqlite的iPhone

-(void)addmoreDATADetails 
{ 


    if(addStmt == nil) 
    { 
     const char *sql = "insert into moreBankroll(MoreName) Values(?)"; 

     if(sqlite3_prepare_v2(database, sql, -1, &addStmt, NULL) != SQLITE_OK) 
      NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(database)); 
    } 
    sqlite3_bind_text(addStmt, 1, [moreName UTF8String], -1, SQLITE_TRANSIENT); 

    if(SQLITE_DONE != sqlite3_step(addStmt)) 
    { 
     NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database)); 
    } 
    else 
    { 

     moreId=sqlite3_last_insert_rowid(database); 
    } 
    sqlite3_reset(addStmt); 


    } 

如果我加入

XYZAppDelegate *appDelegate = (XYZAppDelegate *)[UIApplication sharedApplication].delegate; 
    dbPath =[appDelegate getDBPath]; 
    if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) 

這個在上面的函數中是說沒有這樣的表moreBankroll

這段代碼在另一個項目中工作正常,但不在我的項目中,請幫忙

+0

這可以是任何數量的東西。另一個功能可能沒有發佈數據庫。 – MPelletier 2012-08-08 14:01:30

+0

@MPelletier查看編輯的問題 – iProgrammer 2012-08-08 14:03:13

+0

'dbPath'的內容是什麼? – 2012-08-08 14:03:57

回答

1

只有在創建某些數據庫操作時纔會出現數據庫鎖定錯誤,並在其中您從另一個數據庫操作開始。 嘗試分離兩個操作,如果有的話。 原因是每次它創建一個事務,所以你得到這個錯誤。

希望,這個描述可以幫助你。

+0

感謝您的回覆。我會嘗試你的建議 – iProgrammer 2012-08-08 17:32:18

2

您的數據庫已被鎖定,因爲其他線程/操作正在對其執行查詢。在iPhone中使用SQLite是非常痛苦的做法,也許你應該考慮使用FMDB封裝來重寫它 - 它自己處理所有的鎖並查詢數據。 https://github.com/ccgus/fmdb

+0

好。我會試試這個,謝謝你的回覆。 – iProgrammer 2012-08-08 14:21:10