我正在研究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
此代码在另一个项目中正常工作,但在我的项目中没有,请帮助
答案 0 :(得分:2)
您的数据库已锁定,因为其他线程/操作正在对其执行查询。在iPhone中使用SQLite非常痛苦,也许你应该考虑使用FMDB包装器重写它 - 它自己处理所有锁并查询数据。 https://github.com/ccgus/fmdb
答案 1 :(得分:1)
只有在创建某些数据库操作时才会出现数据库锁定错误,并且在其中启动另一个数据库操作。 如果有,请尝试分出两个操作。 原因是它每次都会创建一个事务,因此您会收到此错误。
希望,这个描述可以帮到你。