如何在方形 sqldelight 中进行批量插入?
Posted
技术标签:
【中文标题】如何在方形 sqldelight 中进行批量插入?【英文标题】:How to do bulk insertion in square sqldelight? 【发布时间】:2017-03-28 11:21:26 【问题描述】:感谢 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();
有没有办法一次性批量插入数据列表?
【问题讨论】:
【参考方案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 花几秒钟的时间,比我愿意等待的时间还要长。我确定这是我插入的问题。以上是关于如何在方形 sqldelight 中进行批量插入?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 sqldelight 中的新编译语句与 sqlbrite 一起使用?