android - 是否有任何工具/方法可以生成用于在 SQLite 中插入数据的数据库脚本?
问题描述
我正在开发一个 Android 应用程序,该应用程序维护一个包含大约 40 多个表的SQLite数据库。这些表应该有预定义的数据,所以我需要在所有表中插入批量数据。有什么方法可以让我创建一个数据插入脚本并像在SQL Server和SQLyog中一样运行它,而不是编写插入数据函数来在每个表中插入数据。
我对此进行了研究,但找不到任何帮助。有人可以让我知道这是否可以使用 SQLite Android 或者我必须看到一个替代方案?
任何帮助将不胜感激。
解决方案
通常,您会使用您最喜欢的 SQLite 管理工具(NaviCat、DBeaver、用于 SQlite 的 DBBrowser 等)将预填充的数据库作为填充数据库的资产提供。
在开发应用程序时,该文件(就像所有 SQLite 数据库一样,是单个文件)然后被复制到资产(资产/数据库,如果使用SQLiteAssethelper)文件夹中。
- 其他支持 rollbak 文件可能存在,但在复制数据库时不应该存在。
- 可能必须创建资产文件夹。
当应用程序第一次运行时,数据库会从 assets 文件夹复制到它的最终位置,通常(推荐)在 data/data/the_package/databases/ 中。有关代表您执行此操作的SQLiteAssetHelper ,请参见上面的链接。
以上可能是最有效的启动方式,尽管应用程序会有些膨胀,因为存在两个数据库副本。
您可以从文件构建数据。这些可能是 JSON/GSON,CSV 甚至是 SQL,例如从您的 SQLite 管理工具(或可能从其他数据库工具)导出。
您可以,如果所需的数据允许使用 SQL 构建数据以动态生成数据,例如
WITH cte(cnt,ts,sid,t,p) AS
(
SELECT
1,
'1971-01-01 00:00:00',
1,
(ABS(random()) % 3000) / 99.35
, ABS(random()) % 25 / 99.35
AS b
UNION ALL
SELECT
cnt + 1,
datetime('1971-01-01 00:00:00','+'||(cnt / 96)||' days','+'||((cnt / 4) % 24)||' hours'),
((cnt % 4) +1),
(ABS(random()) % 3000) / 99.35
, ABS(random()) % 25 / 99.35
FROM cte AS d
LIMIT 8760 * 4 * 10
)
-- SELECT * FROM cte;
INSERT INTO log SELECT ts,sid,t,p FROM cte;
;
这将在 10 年内以每小时 4 行的速度构建一年中每一天的每个小时的数据。即 350,400 行。
推荐阅读
- c# - 我如何激活另一个循环(如果 /else if)
- youtube - YouTube Data API:上传我的视频时选择目标 YT 频道
- terraform - 如何检测在 Terraform 之外所做的更改?
- python - Python/Flask 获取 HTML 输入并将它们存储在 SQL Server 数据库中
- php - 仅将多维数组与键数组进行比较
- iot - ModuleClient IoT Hub Edge 设备:如何从设备队列接收消息?
- c# - Word Automation 重置编号方案
- json - 处理应该是 json 的数据框列时出现 JSONDecodeError
- loops - 更改变量顺序后“for”循环突然无限
- c# - 如何将“未知”对象作为参数传递并使用它的原始对象类型进行反序列化