我正在尋找一種方法來高效地在數據庫中插入〜200行,僅使用android shell。從android外殼插入數據庫行的有效方法?
我使用的腳本的相關部分是:
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並一次全部傳遞它嗎? – PinnyM
您可以通過awk腳本運行輸入文件以創建一批插入語句(如果是tmp文件),然後將該tmpfile重定向到sqllite3(在頂部和底部有任何所需的額外內容)。祝你好運。 – shellter