首页 > 解决方案 > 是否有任何工具/方法可以生成用于在 SQLite 中插入数据的数据库脚本?

问题描述

我正在开发一个 Android 应用程序,该应用程序维护一个包含大约 40 多个表的SQLite数据库。这些表应该有预定义的数据,所以我需要在所有表中插入批量数据。有什么方法可以让我创建一个数据插入脚本并像在SQL ServerSQLyog中一样运行它,而不是编写插入数据函数来在每个表中插入数据。

我对此进行了研究,但找不到任何帮助。有人可以让我知道这是否可以使用 SQLite Android 或者我必须看到一个替代方案?

任何帮助将不胜感激。

标签: androidsqliteandroid-sqlitesql-insertsqliteopenhelper

解决方案


通常,您会使用您最喜欢的 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 行。


推荐阅读