簡體   English   中英

將表導入現有的SQLite數據庫

[英]import a table into an existing SQLite database

在我的應用程序中,首次啟動時,我從網上下載了預先填充的數據庫。 (比較快)

並且每x次,我需要更新數據庫中的一個表。 我不需要舊條目,因此可以刪除它們。

這是我的工作:刪除表的所有內容。 然后,我從網絡上獲取了一個包含我的數據的csv文件,並使用Statement(進行了優化)進行了很多插入操作……但是,這需要花費幾分鍾(數千行)。

因此,我想知道,由於不需要舊條目,如何刪除表並從網絡導入新表? 這樣,我會避免插入,它應該更快。

那可能嗎?

編輯:

這是我的代碼,如果可以優化,請糾正我:

int size = 5;
SQLiteStatement statement = myDB.compileStatement("insert into " + TABLE + " values(?, ?, ?, ?, ?, ?)");
        String data[];
        String line = null;
        int size = 5;
//...
//some code    
//...
myDB.beginTransaction();


    while((line = bufferedReader.readLine()) != null) {
        data = line.replaceAll("'", "''").split(",", -1);

        statement.clearBindings();
        for(int i = 0; i < size; i++) {
            statement.bindString(i + 1, data[i]);
        }
        statement.bindString(size + 1, deadline);
        statement.executeInsert();
    }

    myDB.setTransactionSuccessful();    
    myDB.endTransaction();

只是為了澄清一下,我不想刪除數據庫,因為我想保留數據庫中的所有其他表,這就是為什么我問是否可以使用以下方法將一個表導入(和替換)到數據庫中:其他表。

是的,有可能,但是您必須謹慎使用。

刪除舊數據庫文件后,您可以下載文件並將其粘貼到數據庫文件夾中。 使用Android上下文獲取庫的文件路徑,而不是對其進行硬編碼。

您必須謹慎,因為用於創建數據庫的sqlite版本和設備使用的版本可能有所不同。

如果您還沒有這樣做,我建議的另一種方法是使用自己的事務。 在開始插入之前先開始事務,並在插入行后關閉事務。 之所以會變慢的一個原因是,Android會通過為每個插入啟動事務來插入,但如果您自己進行則不會這樣做。

如果您采用第二種方法,則beginTransaction和endTransaction是您要在SQLiteDatabase上尋找的方法。

編輯:

如果您不想刪除整個數據庫,建議使用第二種事務處理方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM