2011-08-12 43 views
2

要填充我的數據庫,我有一些循環這樣的:的Android SQLite和多個查詢

for (int i=0;i<something;++i){ 
    myDatabase.insert(...); 
} 

但是當我運行它,它需要太長時間。所以我想知道如何改善運行時間? 我會嘗試做一個只有一個調用插入這樣的:

String queries=""; 
for (int i=0;i<something;++i){ 
    queries += "my query;"; 
} 
myDatabse.execSQL(queries); 

但execSQL功能僅插入第一個查詢,而不是別人。 那我該怎麼辦?

回答

9

您應該通過一個交易exec的所有請求:

db.beginTransaction(); 
try { 
    ... 
    db.setTransactionSuccessful(); 
} finally { 
    db.endTransaction(); 
} 
+0

非常感謝,它的作品很棒:) – Imotep

3

您可以嘗試用「BEGIN」和「COMMIT」事務來包裝這些插入行。 SQLite將每個DML和DDL調用封裝在事務塊中,創建事務日誌,並且例如在插入之後,它將刪除它,並且這會再次重複(在您的第一個代碼示例中)。

當你手動執行TCL命令時,比SQLite數據庫留下自動事務模式,並且會執行你要求的操作。

+0

謝謝:)運行時間除以7:P – Imotep

4

您是否嘗試過在一條語句中插入多行?事情是這樣的:

INSERT INTO table (c1, c2, c3) VALUES 
(1, 2, 3), 
(4, 5, 6), 
.... 

您也可以嘗試在一個transaction包裹你的刀片。將所有工作放在一個事務中應該避免每個插入鎖定開銷。

+0

運行時間由7只使用一個交易已經分,我會嘗試這個方法可以減少它再次;) – Imotep