在android上刷新和SQLite数据库

我有一个使用SQLite数据库的android应用程序。 我在应用程序启动时打开数据库,但从不关闭它,因为它一直在使用。

告诉数据库将其所有更改刷新到永久存储的最佳方法是什么? 我是否需要关闭它并重新打开或者是否有更有效的方法?

我的问题是,在手机上进行测试时,在多次写入后关闭手机有时会导致数据库在重新启动应用程序时丢失最新的更新,这对于数据库系统来说显然是不可接受的。

由于我无法find如何捕获应用程序关闭事件,我不知道何时手动关闭数据库。

我在应用程序启动时打开数据库,但从不关闭它,因为它一直在使用。

不要那样做。 您显然忽略了LogCat中出现的所有错误,抱怨您正在泄漏数据库连接。

告诉数据库将其所有更改刷新到永久存储的最佳方法是什么?

它会在交易结束时自动完成 。 默认情况下,每个单独的SQL操作(例如,插入)都是一个事务。

我是否需要关闭它并重新打开或者是否有更有效的方法?

您应该在某个时刻关闭数据库(例如,调解数据库的服务的onDestroy() )。

我的问题是,在手机上进行测试时,在多次写入后关闭手机有时会导致数据库在重新启动应用程序时丢失最新的更新,这对于数据库系统来说显然是不可接受的。

如果即使在正确关闭数据库连接后也可以创建演示问题的示例项目,请将其发布到Android问题跟踪器 。

由于我无法find如何捕获应用程序关闭事件,我不知道何时手动关闭数据库。

当所有活动都从调解数据库连接的服务解除绑定时,关闭它,触发该服务的onDestroy()方法。

或者,在需要访问数据库的每个组件中打开一个新连接,并使用Java同步来确保两个线程不会尝试同时使用数据库(如果需要)。

如果您使用它们嵌套的任何事务。 这意味着如果你在结束之前突破了一个。 由于您从未关闭连接,因此在重新启动手机/应用程序时,您最终会回滚一些写入。

 db.beginTransaction(); try { ... db.setTransactionSuccessful(); } finally { db.endTransaction(); } 

这是在Droid? 你怎么关掉手机? 除非你取出电池,否则关闭手机将慢慢地关闭操作系统,此时它会将所有内容都记录下来。

什么时候你丢失了数据库? 每个应用程序重启后,还是随机? 如果是在每次重启之后,听起来更像是你在启动时破坏了数据库。