我目前正在开发一个应用程序来维护设备上的数据库,该数据库可以在以后通过Retrofit进行更新,但是我试图设计一个允许我将当前数据库缓存到在发布时装上设备。
目前正是这样:
运行应用程序,并通过SQLiteOpenHelper / SQLiteAssetHelper将数据库转换为本地数据库
稍后,设备会与后端同步,抓取JSON文件并手动更新新创建的数据库。
我试图用更自动化的东西替换第一步。
有没有办法,比如说我可以创建一个Gradle任务来调用我的同步'代码,获取JSON,以及将其转换为Sqlite数据库以存储在assets文件夹中的某种方式?
或者也许是在步骤3中构建本地数据库时直接使用JSON的方法吗?
我宁愿远离任何其他程序只是为了让项目易于使用/更新。
感谢。
答案 0 :(得分:2)
如果你不需要逐页缓存数据(这意味着你的本地数据库保存来自服务器的所有数据,你只需要保存当前数据)只需将JSON保存为String,并在启动时再次解析它以显示离线数据,之后,如果连接可用,则获取新数据。
答案 1 :(得分:2)
我认为您可以使用JSON文件直接创建数据库。您可以定义一个包含多个节点的JSON文件,每个节点对应一个数据库版本,其中每个节点都包含与该数据库版本对应的所有DDL命令。
{
"patches": [
{
"version": 1,
"commands": [
"CREATE TABLE User ...",
"CREATE TABLE Login ..."
]
},
{
"version": 2,
"commands": [
"ALTER TABLE User ...",
"DROP TABLE Login ..."
]
}
]
}
这样,您只需维护一个JSON文件,并为您为应用发布的每个更新更新该文件。如果有人第一次安装您的应用程序,那么JSON文件中的所有DDL命令都将被执行,否则只会执行那些与更新前的应用程序中已存在的数据库版本相对应的更高数据库版本的命令。 / p>
您还必须更新onCreate
的{{1}}和onUpgrade
方法。 SQLiteOpenHelper
方法将遍历整个json文件并按顺序执行所有DDL命令(基于版本)。而onCreate
只会在具有更高数据库版本的节点下执行DDL命令。
onUpgrade
答案 2 :(得分:2)
如果您的JSON树结构不会经常更改,您可以使用jsonschema2pojo等工具为其创建PoJo。并使用Gson转换实例。
您可以使用Google的新库存储此PoJo:Room Persistence Library。
它可以在sqlite数据库中为您保存PoJo(您需要使用@Entity
进行注释),它可以更新数据库中的更改。
有关详细信息,您可以观看Google I/O presentations。