数据库在sqlite iphone中被锁定错误

时间:2012-08-08 14:00:26

标签: iphone sqlite

我正在研究sqlite并在数据库中插入值,但我收到数据库已锁定错误 这是我的代码

-(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

此代码在另一个项目中正常工作,但在我的项目中没有,请帮助

2 个答案:

答案 0 :(得分:2)

您的数据库已锁定,因为其他线程/操作正在对其执行查询。在iPhone中使用SQLite非常痛苦,也许你应该考虑使用FMDB包装器重写它 - 它自己处理所有锁并查询数据。 https://github.com/ccgus/fmdb

答案 1 :(得分:1)

只有在创建某些数据库操作时才会出现数据库锁定错误,并且在其中启动另一个数据库操作。 如果有,请尝试分出两个操作。 原因是它每次都会创建一个事务,因此您会收到此错误。

希望,这个描述可以帮到你。