Android中的数据库访问

Dal*_*all 11 java database sqlite android android-activity

我正在创建一个Android应用程序,基本上是关于蘑菇的信息列表.我从sqlite数据库中获取此信息.我有一个全局单例,里面有一个服务类,我用它来访问我的数据库.几乎每个活动都访问数据库.最好是让我的数据库一直打开,还是打开并关闭它,因为我需要数据?

如果最佳做法是始终保持打开状态,我需要确保关闭它,如果我在活动被销毁时将其保持打开状态,最糟糕的情况是什么?

Dav*_*ven 10

这里最好的选择是重构,以便您的应用程序通过ContentProvider访问数据库.您的ContentProvider实现是唯一一个打开数据库句柄的东西.

这为您提供了几个优势:

  • 只有一件事打开了数据库,所以你的问题就消失了.
  • 许多标准支持类可以自动化数据库管理等内容.
  • 更好地与标准的Android列表管理视图集成,这些视图都设计为使用ContentProviders提供的游标自动运行.
  • 您的所有数据都可以通过URI(通常格式为'content://com.fnord.mushroom/mushroom/43')来处理,这意味着其他应用程序也可以访问您的数据.

使用ContentProvider,可以将三个或四个标准类粘合在一起,以生成数据库的浏览器接口,从而实际上不必编写任何实际逻辑.

从消极方面来说,ContentProviders只支持通过有限的接口进行访问 - 在SQL术语中,您可以获得INSERT,SELECT,UPDATE和DELETE而不使用嵌套子句.如果您正在执行复杂的SQL操作,将请求从您的应用程序路由到ContentProvider并再次返回可能会有点痛苦.但是,大多数人不需要这样做(如果你这样做,自定义意图是要走的路).


Pat*_*ick 0

根据我过去在 Java 方面的经验,我会说最好关闭连接,这在小型 Android 应用程序中可能并不重要,但是如果您有 10 个应用程序正在运行并且所有应用程序都访问数据库,则您有 10 个待处理连接。再启动几个请求,迟早另一个应用程序将不得不等待,因为 SQL 服务器无法处理更多请求。

我想您可以将其视为计算机上的文件。您从中读取数据,然后在完成后将其关闭。为什么要在应用程序中保持文件打开?

现在我对 Android 编程还很陌生,所以我还没有时间去实现数据库调用。但是几年前,当我在 Java 应用程序中遇到同样的问题时,我实现了一个数据库对象,在其中我连接到了数据库。“其他人”(类)必须调用数据库对象(单例或最终方法)来获取数据,有点像存储过程,但在应用程序中。

因此,我知道电话何时打出、何时停止。然后我设置了一个超时,这样就好像几分钟内没有发生任何事情一样,我将关闭与数据库的连接。(这也解决了一些超时异常,因为连接超时永远不会发生。)当输入新调用时,我可以轻松启动新连接并使用新的数据库连接。

public Fungus[] getAllFungus()基本上,我通过使用方法 as和来抽象化 SQL 调用public Fungus[] getFilteredFungus(string where)