是否有可能將res/raw資源目錄中存儲的csv文件用於填充sqlite3數據庫中的表?從CSV文件填充Android數據庫?
我的想法是,如果有一種方法可以將整個文件批量導入到表中,那麼這將比遍歷文件中的每一行並執行單個插入語句更清晰和更快速...
我發現有一個SQLite導入命令,允許這樣的:How to import load a .sql or .csv file into SQLite?
...但我有申請在我的Android應用程序的語句的麻煩。我的第一個想法是嘗試類似以下的東西...但沒有運氣:
db.execSQL("CREATE TABLE " + TABLE_NAME + "(id INTEGER PRIMARY KEY, name TEXT)");
db.execSQL(".mode csv");
db.execSQL(".import res/raw/MyFile.csv " + TABLE_NAME);
這可能嗎?
我應該嘗試一種不同的方法來填充我的數據庫嗎?
更新:我標記約瑟夫的答案作爲答案(批量插入使用交易),因爲它工作正常,並根據我的標題直接回答我的問題(謝謝約瑟夫)。但是,我仍然在尋找一種方法,使用import語句將csv文件中的Android應用程序批量插入到sqlite3表中。如果你知道如何做到這一點,請回復。
謝謝你的答案!
感謝您的答覆Josef,我試圖在.apk的資產文件夾中發佈sqlite3 .db文件(就像reigndesign發佈的輪廓)。我在使用reigndesign解決方案時遇到的問題是,當我的數據庫版本#更改時,onUpgrade()不會被調用。實際上,我可以用新版本取代現有數據庫的唯一方法是解決onUpgrade()並添加一個語句,它在調用createDataBase()之前顯式刪除數據庫(這基本上會迫使你每次運行Activity時重新創建數據庫... =( – MoMo 2010-05-22 18:04:11
至於使用可能是可行的解決方案的事務,我在實現此解決方案時能夠獲得onUpgrad()的調用一致性(http:// www .screaming-penguin.com/node/7742),但考慮到獲得reigndesign解決方案工作所需的升級和調整(即'_id'列和'android_metadata'表),一個簡單的sql導入語句仍然是理想的。調整並不難實現我擔心它會增加不必要的依賴關係,以便Android平臺期望他們的數據庫被創建。如果這樣做會改變,那麼我們的解決方案... – MoMo 2010-05-22 18:15:23
使用預建sqlite3 fil e不是很好的做法。製造商可以實施/利用他們想要的任何技術,但必須堅持sqlite3接口 - 所以你的預編譯sqlite3可能無法在某些設備上工作。因此,最好/最安全的做法是始終讓設備創建數據庫,然後批量導入。 – straya 2012-03-02 04:07:44