【发布时间】:2012-12-13 06:26:05
【问题描述】:
我正在寻找一种在数据库中高效插入约 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 error: near ",": syntax error
【问题讨论】:
-
您可以尝试连接所有以分号分隔的 INSERT 并一次性传递吗?
-
您可以通过 awk 脚本运行您的输入文件以创建一批插入语句(如果是 tmp 文件),然后将该 tmpfile 重定向到 sqllite3(在顶部和底部添加任何所需的额外内容) .祝你好运。
标签: android sql database shell sqlite