数据库在iOS中的sqlite3数据库中被锁定崩溃

时间:2014-01-31 05:36:26

标签: ios sqlite

在我当前的应用程序中,我有近10种插入,更新,删除和选择数据进出 sqlite3 数据库的方案。现在,对于每个查询,我打开数据库并关闭数据库,这使我的应用程序非常慢     我尝试过其他方式,例如在应用(applicationDidBecomeActive:)启动时打开数据库,并在应用仅终止(applicationWillResignActive/ applicationWillTerminate:)一次时关闭数据库。
这仅在我们第一次安装应用程序时才有效。一旦我删除了当前版本并重新启动应用程序无效。错误是数据库被锁定。请帮我。哪种方式更好。

4 个答案:

答案 0 :(得分:0)

而不是每次都打开你的数据库

你能做什么

1)在AppDelegate类中初始化NSMutableArray的实例,并将其属性设置为strong和nonatomic。

for example @property(strong,nonatomic)NSMutableArray *temp;

2)在temp,NSMutableArray对象

中备份数据库

3)执行插入,更新,删除和选择数据到temp的操作,即NSMutableArray对象

4)在后台,在数据库中执行相同的操作。因此,这将阻止您的UI部分。

通过此过程,您将在数组中执行所有操作,而不是直接执行数据库。这将有助于不每次都打开您的数据库,并使您的应用程序更快一点。

答案 1 :(得分:0)

您确定您的数据库已正确关闭吗?

如果未正确关闭,您的数据库可能会损坏。 在应用程序结束之后,操作系统不应再锁定该文件(如果此应用程序未配置为在后台运行)。

关闭数据库时,您确定所有语句都已完成并最终确定吗?

答案 2 :(得分:-1)

尝试在

中打开您的数据库
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

每次启动应用程序时都会使用此方法

答案 3 :(得分:-1)

当应用程序变为操作时打开关闭db-file并且当转到后台然后关闭它时,这不是一个好主意,总是打开db并获取数据并关闭连接。尝试为数据库连接类实现单例模式或使用像FMDB一样的sqlite包装器。