gpt4 book ai didi

android - Android 设备上的批量插入

转载 作者:IT王子 更新时间:2023-10-28 23:44:12 31 4
gpt4 key购买 nike

我想在下次升级时将大约 700 条记录批量插入到 Android 数据库中。最有效的方法是什么?从各种帖子中,我知道如果我使用 Insert 语句,我应该将它们包装在事务中。还有一个post关于使用你自己的数据库,但我需要这些数据进入我的应用程序的标准 Android 数据库。请注意,每台设备只能执行一次。

一些想法:

  1. 将一堆 SQL 语句放在一个文件中,一次读取一行,然后执行 SQL。

  2. 将数据放入 CSV 文件、JSON、YAML、XML 或其他文件中。一次读取一行并执行 db.insert()

  3. 弄清楚如何进行导入,然后对整个文件进行一次导入。

  4. 创建一个包含所有记录的 sqlite 数据库,将其复制到 Android 设备上,然后以某种方式合并两个数据库。

  5. [编辑] 将所有 SQL 语句放在 res/values 中的单个文件中,作为一个大字符串。然后一次读取一行并执行 SQL。

最好的方法是什么?还有其他加载数据的方法吗? 3 和 4 甚至可能吗?

最佳答案

通常,每次使用 db.insert() 时,SQLite 都会创建一个事务(并在文件系统中生成日志文件),这会减慢速度。

如果你使用 db.beginTransaction()db.endTransaction() SQLite 在文件系统上只创建一个日志文件,然后同时提交所有插入时间,大大加快了速度。

这里有一些伪代码来自:Batch insert to SQLite database on Android

try
{
db.beginTransaction();

for each record in the list
{
do_some_processing();

if (line represent a valid entry)
{
db.insert(SOME_TABLE, null, SOME_VALUE);
}

some_other_processing();
}

db.setTransactionSuccessful();
}
catch (SQLException e) {}
finally
{
db.endTransaction();
}

如果您希望由于意外错误或其他原因中止事务,只需 db.endTransaction() 无需先将事务设置为成功(db.setTransactionSuccessful())。

另一个有用的方法是使用db.inTransaction()(返回truefalse)来判断你当前是否在中间交易。

Documentation here

关于android - Android 设备上的批量插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3860008/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com