應(yīng)用程序初始化時(shí)需要批量的向sqlite中插入大量數(shù)據(jù),單獨(dú)的使用for+Insert方法導(dǎo)致應(yīng)用響應(yīng)緩慢,因?yàn)?sqlite插入數(shù)據(jù)的時(shí)候默認(rèn)一條語(yǔ)句就是一個(gè)事務(wù),有多少條數(shù)據(jù)就有多少次磁盤(pán)操作。我的應(yīng)用初始5000條記錄也就是要5000次讀寫(xiě)磁盤(pán)操作。
而且不能保證所有數(shù)據(jù)都能同時(shí)插入。(有可能部分插入成功,另外一部分失敗,后續(xù)還得刪除。太麻煩)
解決方法:
添加事務(wù)處理,把5000條插入作為一個(gè)事務(wù)
我們使用SQLite的事務(wù)進(jìn)行控制:
try{
//批量處理操作
for(Collection c:colls){
insert(db, c);
}
db.setTransactionSuccessful(); //設(shè)置事務(wù)處理成功,不設(shè)置會(huì)自動(dòng)回滾不提交。
//在setTransactionSuccessful和endTransaction之間不進(jìn)行任何數(shù)據(jù)庫(kù)操作
}catch(Exception e){
MyLog.printStackTraceString(e);
}finally{
db.endTransaction(); //處理完成
}
二、使用例子如下:下面兩條SQL語(yǔ)句在同一個(gè)事務(wù)中執(zhí)行。
Java代碼
新聞熱點(diǎn)
疑難解答
圖片精選