深入Android SQLite 事務(wù)處理詳解
應(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)行控制:
db.beginTransaction(); //手動(dòng)設(shè)置開(kāi)始事務(wù)
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(); //處理完成
}
一、使用SQLiteDatabase的beginTransaction()方法可以開(kāi)啟一個(gè)事務(wù),程序執(zhí)行到endTransaction() 方法時(shí)會(huì)檢查事務(wù)的標(biāo)志是否為成功,如果程序執(zhí)行到endTransaction()之前調(diào)用了setTransactionSuccessful() 方法設(shè)置事務(wù)的標(biāo)志為成功,則所有從beginTransaction()開(kāi)始的操作都會(huì)被提交,如果沒(méi)有調(diào)用setTransactionSuccessful() 方法則回滾事務(wù)。
二、使用例子如下:下面兩條SQL語(yǔ)句在同一個(gè)事務(wù)中執(zhí)行。
Java代碼
//銀行賬戶事務(wù)測(cè)試
public void payment()
{
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
//開(kāi)啟事務(wù)
db.beginTransaction();
try
{
db.execSQL("update person set amount=amount-10 where personid=?", new Object[]{1});
db.execSQL("update person set amount=amount+10 where personid=?", new Object[]{2});
//設(shè)置事務(wù)標(biāo)志為成功,當(dāng)結(jié)束事務(wù)時(shí)就會(huì)提交事務(wù)
db.setTransactionSuccessful();
}
catch(Exception e){
throw(e);
}
finally
{
//結(jié)束事務(wù)
db.endTransaction();
}
}
- Android SQLite數(shù)據(jù)庫(kù)增刪改查操作的使用詳解
- Android開(kāi)發(fā)之SQLite的使用方法
- Android使用SQLite數(shù)據(jù)庫(kù)的簡(jiǎn)單實(shí)例
- android創(chuàng)建數(shù)據(jù)庫(kù)(SQLite)保存圖片示例
- Android SQLite數(shù)據(jù)庫(kù)基本操作方法
- Android登錄注冊(cè)功能 數(shù)據(jù)庫(kù)SQLite驗(yàn)證
- android中sqlite的按條件查找的小例子
- Android Studio連接SQLite數(shù)據(jù)庫(kù)的登錄注冊(cè)實(shí)現(xiàn)
- Android--SQLite(增,刪,改,查)操作實(shí)例代碼
- Android?Studio中使用SQLite的操作方法
相關(guān)文章
Android基于ImageSwitcher實(shí)現(xiàn)圖片切換功能
這篇文章主要介紹了Android基于ImageSwitcher實(shí)現(xiàn)圖片切換功能的相關(guān)資料,需要的朋友可以參考下2016-02-02Android實(shí)現(xiàn)沉浸式導(dǎo)航欄實(shí)例代碼
通過(guò)本文給大家分享android實(shí)現(xiàn)沉浸式導(dǎo)航欄實(shí)例代碼,代碼非常實(shí)用,需要的朋友可以參考下2016-05-05Android中TextView自動(dòng)適配文本大小的幾種解決方案
在布局中使用的話,注意按照你最大的設(shè)備來(lái)設(shè)置字體大小,這樣在小設(shè)備上回自動(dòng)縮放,下面這篇文章主要給大家介紹了關(guān)于Android中TextView自動(dòng)適配文本大小的幾種解決方案,需要的朋友可以參考下2022-06-06Android Back鍵點(diǎn)擊兩次退出應(yīng)用詳解及實(shí)現(xiàn)方法總結(jié)
這篇文章主要介紹了Android Back鍵點(diǎn)擊兩次退出應(yīng)用詳解及實(shí)現(xiàn)方法總結(jié)的相關(guān)資料,需要的朋友可以參考下2016-10-10android實(shí)現(xiàn)微信聯(lián)合登錄開(kāi)發(fā)示例
本篇文章主要介紹了android實(shí)現(xiàn)微信聯(lián)合登錄開(kāi)發(fā)示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10Android5.0以上版本錄屏實(shí)現(xiàn)代碼(完整代碼)
這篇文章主要介紹了Android5.0以上版本錄屏實(shí)現(xiàn)代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2018-01-01Android倒計(jì)時(shí)神器(CountDownTimer)
這篇文章主要為大家詳細(xì)介紹了Android倒計(jì)時(shí)神器CountDownTimer,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-01-01微信公眾平臺(tái)開(kāi)發(fā)入門(mén)教程(圖文詳解)
由于微信的大熱,為了更好的方便使用微信的用戶查詢一些信息,這篇文章是入門(mén)級(jí)的微信公眾平臺(tái)開(kāi)發(fā)教程,需要的朋友可以參考下2013-09-09