3

感谢 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();

有没有办法一次对数据列表执行批量插入?

4

1 回答 1

3

有点儿。有两种方法。从 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 文件端没有计划支持任意大小的批量插入。

于 2016-11-14T18:25:36.827 回答