2013-03-03 98 views
0

我正在用sqlite开发一个应用程序,但我不知道什么时候应该打开和关闭我的数据库。Sqlite的最佳做法Android

  • 是不是很好的做法是保持数据库在应用程序运行时打开吗?
  • 当我在阅读/写作时,我应该打开还是关闭数据库?
  • 重要吗?

回答

1

是不是很好的做法是保持数据库在应用程序运行时打开吗?

这是个人偏好。

我会亲自将它保持全部打开状态,并在某些生命周期方法中关闭它,例如onStop()onDestroy()。这样,您可以在每次使用该SQLiteDatabase对象之前,通过调用isDbLockedByCurrentThread()isDbLockedByOtherThreads()来轻松检查数据库是否已被使用。这将防止对数据库进行多重操作并将应用程序从可能的崩溃中保存,如果在每次读/写打开/关闭的情况下意外地有两个打开的实例,则可能会发生这种情况。

请记住,当您打开数据库连接时,您的应用程序可能会死亡。

此外,您应该使用事务来减少一次对磁盘的写入操作。

重要吗?

数据库只是一天结束时磁盘上的另一个文件。如果您尝试同时从多个线程/实例写入它,则会遇到问题。

+0

我不同意始终保持连接打开,没有可行的理由这样做。 – 2013-03-03 16:07:19

+0

@StanR。我说那是我亲自做的。你可以为争取和反对争论。我不是说它是你应该遵循的唯一方法。 – 2013-03-03 16:09:38

1

是的,它很重要。在任何应用程序中,不仅仅是移动应用程序,最好的做法是保持数据库连接的打开状态,只要您需要在数据库上执行操作即可。这意味着你应该尽快关闭连接。连接是有限的资源,重要的是不要绑定它们。

+0

首先感谢您的回答。但是,如果从数据库写入和读取需要一些时间,为什么我应该这样做? :\应用程序,应该尽可能快。 – user1866731 2013-03-03 15:22:12

+0

我不确定是否“打开/关闭”连接将使您的应用程序变得更慢。也请看看http://stackoverflow.com/questions/4842112/when-to-close-db-connection-on-android-every-time-after-your-operation-finished – 2013-03-03 15:23:19

+0

从android API“L​​ike getWritableDatabase (),此方法可能需要很长时间才能返回,因此您不应该从应用程序主线程调用它“ – user1866731 2013-03-03 15:29:53