2010-05-20 65 views
6

正如我們Android開發人員所知,SQLiteDatabaseexecSQL方法只能執行一條語句。Android上有效的批量SQL查詢執行,用於升級數據庫

的醫生說:

執行一個SQL語句不是查詢。例如,CREATE TABLE,DELETE,INSERT等。不支持由; s分隔的多個語句。

我必須加載一批記錄,1000和計數。
如何有效地插入這些?
什麼是最簡單的方式來提供這些SQL與你的apk?

我提到,已經有一個系統數據庫,我將在onUpdate事件上運行這個。

我到目前爲止這樣的代碼:

List<String[]> li = new ArrayList<String[]>(); 
     li.add(new String[] { 
       "-1", "Stop", "0" 
     }); 
     li.add(new String[] { 
       "0", "Start", "0" 
     }); 
    /* the rest of the assign */ 
try { 
     for (String[] elem : li) { 
      getDb().execSQL(
        "INSERT INTO " + TABLENAME + " (" + _ID + "," + NAME + "," + PARSE_ORDER 
          + ") VALUES (?,?,?)", elem); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

回答

16

如何插入這些有效?

使用事務:

db.beginTransaction(); 
    try { 
     for(;;) { 
      db.execSQL(...); 
      } 
     db.setTransactionSuccessful(); 
    } finally { 
     db.endTransaction(); 
    } 
1

我覺得你有什麼是加載這些1000條記錄的唯一途徑,現在,只要部署的DB與您的APK文件,看看這個帖子:

http://www.helloandroid.com/tutorials/how-have-default-database

+0

我記錄關於這個問題,所有的解決方案是基於獨家,我們創建一個新的數據庫的事實。但是我需要升級,因此替換現有的數據庫並不好,我必須保留用戶的資料。 – Pentium10 2010-05-20 18:02:30

+0

沒有理由不能使用兩個數據庫 - 一個用戶數據庫和一個靜態信息數據庫。這樣,您可以在升級時完全替換靜態數據庫,同時保持用戶數據不變。 – 2010-05-20 20:07:01