我有一个正在开发的iPhone应用程序,当该应用程序启动时,我打开一个SQLite数据库连接,当应用程序终止时,我将其关闭。该数据库位于应用程序文档文件夹中。
在应用程序的生命周期内,我运行多个INSERT
和UPDATE
语句。但是,由于某些原因,一旦关闭应用程序然后重新启动,我的UPDATE
语句将无法正确保存。我正确地调用了sqlite3_prepare_v2
,sqlite3_step
和sqlite3_finalize
,所以我确定交易应该完成。我在所有这三个函数上都添加了断点,它们都被击中了并且都返回了正确的值。
当我在更新后关闭应用程序并查看documents目录时,可以看到另一个带有-journal的数据库文件。这是否意味着某些事务在交易方面无法正常工作?
我还注意到,在使用applicationWillTerminate:
关闭连接的sqlite3_close()
方法中,它正在返回SQLITE_BUSY
。为什么会这样呢?
我已经整整一整天都在挣扎,所以我真的希望有人能指出我正确的方向!
这是执行更新查询的代码:
//更新语句
sqlite3_stmt * stmt;
char * query =“ UPDATE记录SET fielda =?WHERE pkfield =?;”;
如果(sqlite3_prepare_v2(数据库,查询,-1,&stmt,nil)== SQLITE_OK &&
//绑定
sqlite3_bind_text(stmt,1,[myNSStringVar UTF8String],-1,nil)== SQLITE_OK &&
sqlite3_bind_int(stmt,2,recordID)== SQLITE_OK){
// 执行
int ret = sqlite3_step(stmt);
如果(ret == SQLITE_DONE){
sqlite3_finalize(stmt);
}
}
最佳答案
啊...我想通了!我晦涩的finalize语句之一实际上从未实现过!因为它只是一个SELECT语句,所以我没有对其进行检查,因为它与任何数据操作或事务都没有关系!这是窗外一天的开发价值!但我不会再犯这个错误!
谢谢你们的帮助!
关于iphone - 在应用关闭并重新启动后,对SQLite数据库的某些更改不会持久化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/857610/