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

首頁 > 系統 > Android > 正文

Android批量插入數據到SQLite數據庫的方法

2019-10-23 18:33:02
字體:
來源:轉載
供稿:網友

Android中在sqlite插入數據的時候默認一條語句就是一個事務,因此如果存在上萬條數據插入的話,那就需要執行上萬次插入操作,操作速度可想而知。因此在Android中插入數據時,使用批量插入的方式可以大大提高插入速度。

有時需要把一些數據內置到應用中,常用的有以下幾種方式:

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(); 

第三種方法需要的時間最短,鑒于該類已經在API17中廢棄,所以第四種方法應該是最優的方法。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安顺市| 五大连池市| 繁峙县| 涟源市| 都兰县| 木兰县| 清河县| 焦作市| 来宾市| 新兴县| 津市市| 垦利县| 旌德县| 临城县| 永城市| 社旗县| 昌宁县| 仪征市| 建水县| 乐平市| 泾川县| 高碑店市| 景洪市| 洛浦县| 望江县| 鹤峰县| 萨嘎县| 井陉县| 新沂市| 沂源县| 广德县| 巢湖市| 南京市| 佛坪县| 惠水县| 莱芜市| 大埔区| 钦州市| 隆化县| 克拉玛依市| 额敏县|