跳转至
For the complete DHIS2 documentation index, see llms.txt.

数据库{ #android_sdk_database }

数据库架构{ #android_sdk_database_architecture }

SDK 使用 Android Room Persistence Library 作为数据库层。Room 可对 SQL 查询进行编译时验证,减少模板代码,并与 Android 架构组件更好地集成。

数据库实现是 SDK 的内部功能,应用程序应通过提供的存储库和服务与数据交互。不建议直接访问数据库,因为不同版本的内部结构可能会发生变化。

数据库范围{ #android_sdk_database_scope }

SDK 将[服务器、用户]对的数据保存在一个独立的数据库中。从 1.6.0 版开始,SDK 支持多个账户([服务器、用户]对),每个账户的信息都存储在一个独立的数据库中。只有删除账户时才会删除数据库。数据库在登录成功后自动创建。

加密{ #android_sdk_database_encryption }

从 SDK 1.1.0 版开始,数据可以存储在加密数据库中。加密密钥由 SDK 随机生成 加密密钥由 SDK 随机生成并妥善保管。 加密状态(数据库是否加密)可在服务器级别的 android-settings-app 中配置。 默认状态为假:如果未安装应用程序,数据库将不会加密。

在给定服务器和用户的首次登录过程中,将从 API 下载加密状态,并创建一个 数据库。

在以后登录或同步元数据时,SDK 将再次从服务器下载加密状态,如果发生变化,将加密或解密当前数据库,而不会丢失数据、 如果发生变化,将加密或解密当前数据库,而不会丢失数据。

加密性能

  • 数据库大小:无论是否进行加密,数据库大小都大致相同。
  • 速度:使用加密数据库,读写速度平均降低5%至10%。

进口/出口{ #android_sdk_database_import_export }

数据库可以导出和导入到不同的设备中。

该功能的主要用途之一是调试:有时很难知道同步问题或错误的原因,而在模拟器或不同设备上复制问题是非常有用的。

// 导出数据库
val database = d2.maintenanceModule().databaseImportExport().exportLoggedUserDatabase()

// 导入数据库
val metadata = d2.maintenanceModule().databaseImportExport().importDatabase(database)

// 元数据对象包含数据库信息(服务器地址、用户名......)。 

// 导入数据库后,可以像往常一样登录
d2.userModule().login("username", "password", "serverUrl")

导出过程使用 ZIP 加密技术对数据库进行加密,因此除非提供正确的用户凭据,否则无法读取数据库文件。

需要考虑的事项 - 导出的文件只包含数据库,不包含文件资源(图像、图标、文件......)。 - 接收设备运行的**SDK 版本必须等于或高于**用于导出数据库的 SDK 版本。