Sqlite之事務
阿新 • • 發佈:2018-06-19
font try The 其中 情況 總結 tle 其他 解決
原地址 :http://www.cnblogs.com/wangmars/p/3914090.html
SQLite,是一款輕型的數據庫,被廣泛的運用到很多嵌入式的產品中,因為占用的資源非常少,二其中的操作方式幾乎和我們接觸的數據庫不多,甚至只有幾百K的他自然會被需求者青睞,下面講一下在這樣的輕型數據庫中怎麽對他進行一些讀寫操作。
之前做選擇聯系人的時候出現如果一個手機裏聯系人超過2000的話,往數據庫裏面插入會非常耗時,不同的手機存儲的條數不同,這個存儲的數量和手機的內存有很大的關系,往往取決於手機內存,下面對於數據量大的情況來寫一下sqlite的批量查詢。
SqLite 插入數據有幾種
第一種 :由於InsertHelper 這個類在android api17已經被廢棄了,所以要是基於 之前開發的可以使用
InsertHelper ih = new InsertHelper(db, "表名"); db.beginTransaction(); final int 列1= ih.getColumnIndex("列1"); final int 列2 = ih.getColumnIndex("列2"); try { for (Station s : busLines) { ih.prepareForInsert(); ih.bind(列1, 對應的值); ih.bind(列2, 對應的值); ih.execute(); } db.setTransactionSuccessful(); } finally { ih.close(); db.endTransaction(); db.close(); }
第二種 :
同樣在 SQLiteDatabase 中
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(); } }
第三種:SQLiteDatabase db.insert("table_name", null, contentValues) 中也可以批量插入
public void insertData(插入數據){
db.beginTransaction(); // 手動設置開始事務
for (ContentValues v : list) {
db.insert("表名", null, v);
}
db.setTransactionSuccessful(); // 設置事務處理成功,不設置會自動回滾不提交
db.endTransaction(); // 處理完成
db.close()
}
第四種 : SQLiteStatement 個人比較喜歡用這種方式,對數據的處理看的很清楚明了
String sql = "insert into表名(對應的列) values(?)";
SQLiteStatement stat = db.compileStatement(sql);
db.beginTransaction();
for (數據集) {
//循環所要插入的數據
}
db.setTransactionSuccessful();
db.endTransaction();
db.close();
總結: 以上的幾種方式都用到了數據庫中的事務這個東西,sqlite語句在其中只會走一次,其他的就是數據循環到數據庫中的對象裏,這樣比以前用對象插入,再用for在外圍循環快的不知道多少倍,之前插入2000多條數據300多毫秒,以後對於上萬條數據也是非常之快的。
Sqlite之事務