我們都知道sqlite是乙個輕量級的資料庫,在批量儲存大資料的時候很受效能的限制。而在android開發中如果儲存資料的效率過慢的話,就會造成程式執行的卡頓,使用者體驗會很不好。我們都說資料庫儲存的時候要通過開啟事務來進行儲存,這樣能提高儲存的效率,但我們也得知道的是頻繁的開關事務是最消耗效能的,所有我這裡優化的原則是-減少事務的開啟與關閉。
首先,我們來看看我優化前的**
儲存公司資訊到資料庫,從**裡面初步的看沒有任何問題,執行也沒有出現任何問題,但當專案中的資料達到上萬後問題就暴露出來了。由於需要把上萬個公司存到資料庫,優化前的做法就是遍歷list,然後呼叫addbathcompanydata去儲存,而此時程式出現了明顯的卡死,通過跟蹤發現此處上萬條資料全部執行完成需要恐怖的四十多秒,你沒有看錯,就是四十多秒,這個問題可想而知。
public
boolean
addbathcompanydata
(chatcompany chatcompany)
; mdb.
execsql
(sql, objects)
; mdb.
settransactionsuccessful()
;}catch
(exception e)
finally
}return
true
;}
然後,我們來看看優化後的**
我們對比優化前後的**,其實的沒有別的變化,只不過是把迴圈遍歷list放到了addbathcompanydata方法裡面,而把事務的開啟mdb.begintransaction();放到了迴圈之外,這樣即使儲存上萬條資料,事務也只會開啟和關閉一次。當然效果也是顯著的,優化後的執行時間只需要0.2秒的時間。相信這個速度暫時肯定是夠用了。
public
boolean
addbathcompanydata
(list
chatcompanys)
final string sql =
"insert into company values(null,?,?,?,?,?,?)"
; object[
] objects =
newobject
; mdb.
execsql
(sql, objects);}
mdb.
settransactionsuccessful()
;}catch
(exception e)
finally
}return
true
;}
ps:發布應用中的實際應用,真實有效 android SQLite大資料插入優化
sqlitedatabase db this.getwritabledatabase 獲取資料庫可寫物件 db.begintransaction 啟動事務 try 以上資料操作全部成功,通過標記settransactionsuccessful為true,事務才提交,否則回滾 預設標記為false d...
android sqlite基本操作
package com.xiangqiao.sqlite3 import android.content.contentvalues import android.database.cursor import android.database.sqlite.sqlitedatabase import...
關於Android SQLite詳細
一 sqlite簡介 在android平台上,整合了乙個嵌入式關係型資料庫 sqlite,sqlite3支援 null integer real 浮點數字 text 字串文字 和blob 二進位制物件 資料型別,雖然它支援的型別雖然只有五種,但實際上sqlite3也接受varchar n char ...