Android SQLite插入大量資料的效率優化

2021-07-26 05:04:25 字數 1287 閱讀 1146

通常,在用

arraylist

<

contentprovideroperation

>

operations

=new

arraylist

<

contentprovideroperation

>();

// do something.

operations

.add

(contentprovideroperation

.newupdate

(uri).

withvalue

(key1

,value1).

withvalue

(key2

,value2

)....

.build

());

// do something.cr.

(authority

,operations

);

原以為上面的**中,contentresolver幫忙處理了事務機制。

真正的解決方案是,需要顯示引入sqlite的transaction機制。

以實際專案為例,是乙個contentprovider。在繼承contentprovider的子類中

override名為bulkinsert的函式,加入transaction的支援:

@override

public

intbulkinsert

(uri

uri,

contentvalues

values)}

db.settransactionsuccessful

();}

finally

return

values

.length;}

並且改用contentresolver.bulkinsert方法來批量insert:

contentvalues

cnttvalues

=new

contentvalues

[size

];// do something. cr.

bulkinsert

(uri

,cnttvalues

);

經測試,1000左右的資料插入總耗時從40s降到2s左右——已經包括寫log到本地檔案的時間,所以優化效果還是非常可觀。

android SQLite大資料插入優化

sqlitedatabase db this.getwritabledatabase 獲取資料庫可寫物件 db.begintransaction 啟動事務 try 以上資料操作全部成功,通過標記settransactionsuccessful為true,事務才提交,否則回滾 預設標記為false d...

android sqlite插入與修改tips

table 要插入資料的表的名稱 nullcolumnhack 當values引數為空或者裡面沒有內容的時候,我們insert是會失敗的 底層資料庫不允許插入乙個空行 為了防止這種情況,我們要在這裡指定乙個列名,到時候如果發現將要插入的行為空行時,就會將你指定的這個列名的值設為null,然後再向資料...

android sqlite基本操作

package com.xiangqiao.sqlite3 import android.content.contentvalues import android.database.cursor import android.database.sqlite.sqlitedatabase import...