android - 从 android shell 向数据库中插入行的有效方法?

标签 android sql database shell sqlite

我正在寻找一种在数据库中高效插入约 200 行的方法,只使用 android shell。

我正在使用的脚本的相关部分是:

while read line
do
    uid=`echo $line " awk '{print($2)}'`
    pkg=`echo $line " awk '{print($1)}'`
    /system/xbin/sqlite3 /mnt/sdcard/apps.db "INSERT INTO app_list values($uid, '$pkg', 0, 0, 0, 0, 0, 0)
done < /data/system/packages.list

此脚本的目标是生成一个数据库,其中包含所有已安装应用程序的列表(UID/程序包名称)。其他列稍后使用。

对于约 200 个应用程序,此脚本需要几分钟时间:执行每个 sqlite 命令需要约 2 秒。这应该可以通过使用事务得到很大改善,但我认为没有明确的方法可以做到这一点。

如有任何帮助,我们将不胜感激

谢谢。

编辑:

回复帖子#1:
更改:
qry=$qry ($uid, '$pkg', 0, 0, 0, 0, 0, 0),qry=$qry"($uid, '$pkg' , 0, 0, 0, 0, 0, 0),"
/system/xbin/sqlite3/mnt/sdcard/apps.db $qry/system/xbin/sqlite3/mnt/sdcard/apps.db "$qry;"
回显最后一条命令显示:
/system/xbin/sqlite3/mnt/sdcard/apps.db INSERT INTO app_list VALUES (10028, 'com.google', 0, 0, 0, 0, 0, 0), (10048, 'com.google .something', 0, 0, 0, 0, 0, 0), ... (10062, 'com.google.somethingelse', 0, 0, 0, 0, 0, 0);
这似乎是正确的,但在执行时输出以下错误:
SQL 错误:靠近“,”:语法错误

最佳答案

每行 2 秒的大部分时间可能都花在了每次命令运行时启动一个新的 sqlite 实例并在之后退出,因此您可以通过一次添加所有行来获得很大的加速.

您可以 insert multiple rows in a single SQL query ,因此最好将一个巨大的字符串与所有插入值连接起来。 bash 脚本看起来像这样。

qry=""
while read line
do
    uid=`echo $line " awk '{print($2)}'`
    pkg=`echo $line " awk '{print($1)}'`
    qry="$qry INSERT INTO app_list VALUES ($uid, '$pkg', 0, 0, 0, 0, 0, 0);"

done < /data/system/packages.list

/system/xbin/sqlite3 /mnt/sdcard/apps.db "$qry;"

编辑:

澄清一下,此脚本使用“INSERT INTO TBL VALUES (row 1 vals), (row 2 vals), (row 3 vals);”语法,因为 SQLite 不支持它。

关于android - 从 android shell 向数据库中插入行的有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14061874/

相关文章:

android - 如何删除父 View - android

java - JooQ 中的 DuplicateKeyException

sql - 如何在 PostgreSQL 中按最大 ID 到最小 ID 排序

php - 编码数据的最佳方式

database - SQL Developer 帮助输入替换变量

java - 自定义 ListPreference 中的选定项目未更改

android - 验证新用户后,Google SignIn 永远不会调用 onActivityResult

android - 在android中自定义图表

mysql - WHERE 语句中的 REGEXP?

sql - 解决子选择中的不明确列