【问题标题】:Best practices with Sqlite Android [duplicate]Sqlite Android 的最佳实践 [重复]
【发布时间】:2013-03-03 15:08:57
【问题描述】:

我正在使用 sqlite 开发一个应用程序,但我不知道何时应该打开和关闭我的数据库。

  • 在应用程序运行时保持数据库打开是否良好做法?
  • 我应该只在读取/写入数据库时​​打开和关闭数据库吗?
  • 重要吗?

【问题讨论】:

    标签: android android-sqlite


    【解决方案1】:

    在应用程序运行时保持数据库打开是一种好习惯吗?

    这是个人喜好。

    我个人会一直保持打开状态,并以某种生命周期方法关闭它,例如onStop() 或onDestroy()。这样,您可以在每次使用之前通过在单个 SQLiteDatabase 对象上调用 isDbLockedByCurrentThread() 或 isDbLockedByOtherThreads() 轻松检查数据库是否已在使用中。这将防止对数据库进行多次操作,并使您的应用程序免于潜在的崩溃,如果您在每次读/写打开/关闭的情况下不小心有两个打开的实例,这是可能的。

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

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

    重要吗?

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

    【讨论】:

    • 我不同意一直保持连接打开,没有可行的理由这样做。
    • @StanR。我说那是我个人会做的。你可以提出支持和反对的论据。我并不是说这是您应该遵循的唯一方法。
    【解决方案2】:

    是的,这很重要。在任何应用程序中,不仅是移动应用程序,最好只在您需要它对所述数据库执行操作时才保持数据库连接打开。这意味着您应该尽快关闭连接。连接是一种有限的资源,重要的是不要将它们捆绑在一起。

    【讨论】:

    • 首先感谢您的回答。但是,如果从数据库写入和读取需要一些时间,我为什么要这样做? :\ 一个应用程序,应该尽可能快..
    • 我不确定“打开/关闭”连接是否会使您的应用程序慢得多。也请看看stackoverflow.com/questions/4842112/…
    • 来自android API“和getWritableDatabase()一样,这个方法可能需要很长时间才能返回,所以你不应该从应用程序主线程调用它”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-11
    • 2010-12-16
    • 2012-02-09
    • 1970-01-01
    • 2014-10-11
    • 2013-01-24
    相关资源
    最近更新 更多