1

我正在使用 sqlite 并在数据库中插入值,但我得到 Database is locked 错误这是我的代码

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

此代码在另一个项目中运行良好,但在我的项目中运行良好,请帮助

4

2 回答 2

2

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

于 2012-08-08T14:17:31.523 回答
1

仅当您创建一些数据库操作并且在其中您开始另一个数据库操作时才会出现数据库锁定错误。如果有,请尝试分离出两个操作。这样做的原因是每次它创建一个事务,所以你得到这个错误。

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

于 2012-08-08T14:54:18.033 回答