如何在sqlite中添加特定数量的空行?

How to add specific number of empty rows in sqlite?

我有一个 SQLite 文件,我想添加 2550 empty (NULL) 行。

我可以用这段代码添加一个空行

INSERT INTO my_table DEFAULT VALUES

但我需要 2550 行。有什么捷径吗?我不想执行相同的代码 2550 次。

您可以使用递归 CTE 生成数字,然后插入 . . .但您需要更明确地说明要插入的值:

with cte as (
      select 1 as n
      union all
      select n + 1
      from cte
      where n < 2550
     )
insert into mytable (<something>)
    select <something>
    from cte;

我认为您需要为 SQLite 中的至少一列指定值。

如果您的 SQLite 版本支持它,您可以使用递归 CTE 生成从 1 到 2550 的序列,然后沿着该序列插入“空”记录:

WITH RECURSIVE generate_series(value) AS (
    SELECT 1
    UNION ALL
    SELECT value + 1
    FROM generate_series
    WHERE value + 1 <= 2550
)

INSERT INTO yourTable (col1, col2, ...)
SELECT NULL, NULL, ...
FROM generate_series;

不清楚您要为实际插入指定哪些值(如果有)。如果您在插入中省略任何列的提及,那么默认情况下 SQLite 应该分配 NULL 或为该列定义的任何默认值。

如果你的 table 为空,则使用递归 CTE 获取 2550 行,每行由 1 到 2550 的整数组成,并使用它们插入 2550 行:

WITH cte AS (
  SELECT 1 nr
  UNION ALL
  SELECT nr + 1
  FROM cte
  WHERE nr < 2550
)
INSERT INTO my_table(rowid)
SELECT nr FROM cte 

这样,您使用 rowid 列,其中将存储 CTE 的整数值,并且无需枚举 table 中的所有列INSERT 语句。
这些列将获得它们的默认值。

如果您的 table 不为空,您可以通过从 table +1:[=24 中的最大 rowid 值开始整数,以类似的方式进行=]

WITH cte AS (
  SELECT MAX(rowid) + 1 nr FROM my_table
  UNION ALL
  SELECT nr + 1
  FROM cte
  WHERE nr < (SELECT MAX(rowid) + 2550 FROM my_table)
)
INSERT INTO my_table(rowid)
SELECT nr FROM cte

查看简化的 demo(5 行)。

但由于您还标记了 android-sqlite,您可以使用 for 循环:

for (int i = 1; i <= 2550; i++) {
    db.execSQL("INSERT INTO my_table DEFAULT VALUES");
}

其中 dbSQLiteDatabase 的有效非空实例。