SQLite数据库和ContentProvider的最佳实践

我的Android应用程序正在从几个不同的活动和服务读取和写入本地SQLite数据库。 相当标准。 但是,我并不满意所有存储为常量的数据库细节,然后在访问数据库的任何地方使用。 我build议将数据库包装在ContentProvider中。 听起来不错。 当我重构我的代码时,我想我会问:

  • Android中本地DB数据存储的最佳做法是什么?
  • 在哪里以及如何存储“CREATE TABLE”语句,列名称,其他SQL?
  • 你介意分享你实例化的类的列表,以及每个类的内容(ContentProvider,DatabaseProvider,DatabaseHelper …)吗?
  • 你如何协调你的本地Android DB的结构和通过REST接口提供的服务器端数据库?

是的,我意识到我在常年“Android对象关系映射框架在哪里? 题。 现在,我主要想知道如何使用标准SDK中的可用function来构buildAndroid应用程序。

一如既往,感谢指针!

我们一直在Android上调整ORMLite一段时间,它运行良好。 ORMLite支持本地数据库调用的Android,也支持通过JDBC的其他数据库。 你注释你的类/字段,并使用基本的DAO类持久化到SQLite。

  • CREATE TABLE语句是由我的ORMLite的实用程序类处理的。 大多数SQL由DAO类处理。
  • 在线文档的Android部分介绍了类的层次结构。 你实现了一个DatabaseHelper ,它有助于创build一个更新你的数据库。 您的活动扩展了OrmLiteBaseActivity (或服务或选项卡),可以访问帮助程序和DAO。
  • ORMLite不提供与远程REST服务器合并的解决scheme。

希望这有些帮助。

现在,我主要想知道如何使用标准SDK中的可用function来构buildAndroid应用程序。

我不是一个真正的SQL风扇和它在Android中处理的方式,所以我使用对象数据库NeoDatis 。 它基本上只是让你很容易地将Java对象存储/检索到存储在设备上的平面文件。 db40也是另一个可以在android上运行的对象数据库。

使用这种方法没有任何问题,你可能要注意,包括NeoDatis库会增加你的APK大小〜700kb。

我不知道我有一个答案,除了我不太喜欢这个如何处理,我也觉得它很混乱。 我通常会遵循SDK附带的记事本示例中给出的模式。

由于这个,我正在使用自己的迷你ORM框架,使用注释和pipe理所有这些。 到目前为止,事情还在继续,但是我还没有完成所有工作。

你也可以看看Androrm 。 这是一个开源的orm工具,特别为androiddevise。 它应该帮助你所有的数据库相关的东西。

只是为了更多地完成列表…另一个ORM是BARACUS框架提供的ORM解决scheme。 它不是要构build企业大小的数据库,更多的是在数据库中存储一些实体,并使其可以被应用访问。 里面没有代码生成的方法, 你只需要写你的实体pojo,一个rowmapper和你的表def。 因此,您可以使用DAO,dependency injection,IOC样式生命周期支持等等。

ORM迄今的function:

  • 延迟加载(集合+懒惰引用)
  • CRUD操作是免费的
  • 按实例查询
  • 几个方面(autotimestamp等)
  • 跨越多个应用程序版本的持久层生命周期支持

对于更复杂的数据库的东西(使用ORM是一点点手工工作,像在旧的springrowmapper时间)我目前正在考虑添加ormlite集成。

有关更多代码的详细信息,请查看github上的教程应用程序