国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android批量插入數據到SQLite數據庫

2019-11-09 17:47:41
字體:
來源:轉載
供稿:網友

Android中在sqlite插入數據的時候默認一條語句就是一個事務,因此如果存在上萬條數據插入的話,那就需要執行上萬次插入操作,操作速度可想而知。因此在Android中插入數據時,使用批量插入的方式可以大大提高插入速度。  有時需要把一些數據內置到應用中,常用的有以下2種方式:其一直接拷貝制作好的SQLite數據庫文件,其二是使用系統提供的數據庫,然后把數據批量插入。我更傾向于使用第二種方式:使用系統創建的數據庫,然后批量插入數據。批量插入數據也有很多方法,那么那種方法更快呢,下面通過一個demo比較一下各個方法的插入速度。  1、使用db.execSQL(sql)  這里是把要插入的數據拼接成可執行的sql語句,然后調用db.execSQL(sql)方法執行插入。
public void inertOrUpdateDateBatch(List<String> sqls) {SQLiteDatabase db = getWritableDatabase();db.beginTransaction();try {for (String sql : sqls) {db.execSQL(sql);}// 設置事務標志為成功,當結束事務時就會提交事務db.setTransactionSuccessful();} catch (Exception e) {e.PRintStackTrace();} finally {// 結束事務db.endTransaction();db.close();}}
  2、使用db.insert("table_name", null, contentValues)  這里是把要插入的數據封裝到ContentValues類中,然后調用db.insert()方法執行插入。
db.beginTransaction(); // 手動設置開始事務for (ContentValues v : list) {db.insert("bus_line_station", null, v);}db.setTransactionSuccessful(); // 設置事務處理成功,不設置會自動回滾不提交db.endTransaction(); // 處理完成db.close()
3、使用InsertHelper類  這個類在API 17中已經被廢棄了
InsertHelper ih = new InsertHelper(db, "bus_line_station");db.beginTransaction();final int directColumnIndex = ih.getColumnIndex("direct");final int lineNameColumnIndex = ih.getColumnIndex("line_name");final int snoColumnIndex = ih.getColumnIndex("sno");final int stationNameColumnIndex = ih.getColumnIndex("station_name");try {for (Station s : busLines) {ih.prepareForInsert();ih.bind(directColumnIndex, s.direct);ih.bind(lineNameColumnIndex, s.lineName);ih.bind(snoColumnIndex, s.sno);ih.bind(stationNameColumnIndex, s.stationName);ih.execute();}db.setTransactionSuccessful();} finally {ih.close();db.endTransaction();db.close();}
  4、使用SQLiteStatement  查看InsertHelper時,官方文檔提示改類已經廢棄,請使用SQLiteStatement
String sql = "insert into bus_line_station(direct,line_name,sno,station_name) values(?,?,?,?)";SQLiteStatement stat = db.compileStatement(sql);db.beginTransaction();for (Station line : busLines) {stat.bindLong(1, line.direct);stat.bindString(2, line.lineName);stat.bindLong(3, line.sno);stat.bindString(4, line.stationName);stat.executeInsert();}db.setTransactionSuccessful();db.endTransaction();db.close();
  下圖是以上4中方法在批量插入1萬條數據消耗的時間  可以發現第三種方法需要的時間最短,鑒于該類已經在API17中廢棄,所以第四種方法應該是最優的方法。

原文地址:http://www.blogjava.net/qileilove/archive/2014/05/23/414005.html


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宣恩县| 合川市| 台安县| 子洲县| 天水市| 新巴尔虎右旗| 烟台市| 铁岭市| 马边| 迁安市| 泽普县| 河源市| 剑川县| 肥乡县| 安徽省| 墨玉县| 杭州市| 德兴市| 靖远县| 民和| 奉新县| 礼泉县| 富锦市| 商丘市| 惠安县| 南丹县| 祁东县| 汨罗市| 吉林省| 宝清县| 温州市| 沁源县| 北海市| 永嘉县| 报价| 普兰店市| 桐城市| 丰县| 宁波市| 镇沅| 成武县|