我正在创建一个肯定句应用程序。这个应用程序将显示用户积极的句子,当他们滚动页面向上或向下,它会显示另一个肯定的消息等。有时候,他们会发出通知。但是为了向人们展示这些句子,我需要从DB室之类的地方获取它们。我解决这个问题的方法是直接将所有数据插入到用户本地的Room DB中,然后在没有互联网连接的情况下获取所有的句子。但要实现这一点,我需要知道是否可以插入整个脚本文件到数据库。例如,我将有一个脚本文件与100个查询,当我运行它将直接插入100个数据到我的本地数据库。我如何才能做到这一点?谢谢.
我正在创建一个肯定句应用程序。这个应用程序将显示用户积极的句子,当他们滚动页面向上或向下,它会显示另一个肯定的消息等。有时候,他们会发出通知。但是为了向人们展示这些句子,我需要从DB室之类的地方获取它们。我解决这个问题的方法是直接将所有数据插入到用户本地的Room DB中,然后在没有互联网连接的情况下获取所有的句子。但要实现这一点,我需要知道是否可以插入整个脚本文件到数据库。例如,我将有一个脚本文件与100个查询,当我运行它将直接插入100个数据到我的本地数据库。我如何才能做到这一点?谢谢.
1条答案
按热度按时间3mpgtkmj1#
但要实现这一点,我需要知道是否可以插入整个脚本文件到数据库。
利用预填充的数据库并将其作为资产提供可能会更简单。然而,是的,它当然可以使用脚本文件(SQL
INSERT
s)。预填充数据库的简单性
SQLite数据库是一个可以复制的文件(通常使用Room的databaseBuilder的
createFromAsset
方法从assets文件夹中复制)。数据只是读然后写。为了处理脚本,数据必须被读取、处理和插入,就像你提到的脚本一样,在一个循环中。所以你必须编写一个循环来进行处理。您还必须在正确的时间执行此操作(很可能是通过覆盖
CallBack
的onCreate
方法)。所以需要更多的代码。然而,Room在模式方面非常不灵活。简而言之,它必须是预期的房间(或调整,这将是另一个编码复杂性)。
1.根据Room的预期模式创建数据库的简单方法是
1.编写
@Entity
注解类(表),然后1.用
@Database
注解的entities
参数编码一个@Database
注解的抽象类,包括所有@Entity
注解的类,然后1.成功编译项目,然后
1.找到与
@Database
注解类同名但后缀为_Impl
的类,然后1.找到
createAllTables
方法,然后1.复制SQL以创建表(以及其他组件,如索引)。
Demo
下面演示了两个工作示例,为两个数据库加载了大约10000行数据:
两者的模式是完全相同的,并且基于单个
@Entity
注解类[Sentence]:然后创建了两个
@Database
注解类(如下),编译后的项目允许从生成的java中复制用于创建表的SQL:在这个阶段,可以很容易地生成两个数据源,数据库和脚本文件(所有10000行的id都是相同的数据栏)。
在SQLite工具中,使用了以下内容:
在文本编辑器中,单个插入语句重复了99999次
关闭数据库,然后将其复制到assets文件夹中(创建后)。同样,文本文件也被复制到assets文件夹中:
Sentence 1
@Database
annotated class-处理预填充数据库(asset pixelce1.db):-createFromAsset
是一段简单的单行代码Sentence 2
@Database
annotated class-要处理通过Scripce2.txt文件的“Scripted”加载,请执行以下操作:-onCreate
函数(在创建数据库时调用的函数,即数据库的生存期为ONCE)。最后是代码:
@Dao
注解接口中的函数)打开的。使用App Inspection,则
和