【问题标题】:How to do bulk insertion in square sqldelight?如何在方形 sqldelight 中进行批量插入?
【发布时间】:2023-03-29 04:10:01
【问题描述】:

感谢 Square 提供 SQLDelight 并为 sqlite db 交互提供类型安全的 api。我正在做如下单行插入:

      MyTable.Insert_row insert_row =
    new MyTableModel.Insert_row(
      mOpenHelper.getWritableDatabase(),
      MyTable.FACTORY
    );
  MyTable.bind(insert_row, data);
  insert_row.program.executeInsert();

有没有办法一次性批量插入数据列表?

【问题讨论】:

    标签: android sqlite square sqldelight


    【解决方案1】:

    有点。有两种方法。从 SQLite 3.7.11(包含在 Android API 16 及更高版本中)开始,您可以从 sqlite 端一次插入多个值:

    INSERT INTO myTable
    VALUES (?, ?), (?, ?), (?, ?);
    

    这可能不是你想要的。只要你只创建一次插入语句,绑定和执行多行实际上是非常快的:

    MyTable.Insert_row insert_row =
        new MyTableModel.Insert_row(
          mOpenHelper.getWritableDatabase(),
          MyTable.FACTORY
        );
    for (Row row : rows) {
      MyTable.bind(insert_row, row);
      insert_row.program.executeInsert();
    }
    

    这可能更接近你想要的。目前没有计划支持从 .sq 文件端进行任意大小的批量插入。

    【讨论】:

    • 您能否为最新版本的 SQLDelight 更新此答案?我正在尝试类似的东西,但性能很糟糕。 Room 花几秒钟的时间,比我愿意等待的时间还要长。我确定这是我插入的问题。
    猜你喜欢
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 2015-06-17
    • 2011-02-24
    • 2012-02-12
    • 2016-10-09
    • 1970-01-01
    相关资源
    最近更新 更多