日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android sqlite批量操作,Android: SQLite批量插入数据的最佳实践

發布時間:2023/12/2 Android 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android sqlite批量操作,Android: SQLite批量插入数据的最佳实践 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

大家都知道,Android里數據庫用的是SQLite。在實際開發過程中,我們有時候會遇到批量插入數據的場景。這篇文章給大家分享一個小技巧,讓批量插入數據達到最快的目的。

首先,我先創建一個Table,里面只有一個字段:

public static final String TABLE_NAME = "demo_data";

public static final String COLUMNS_NAME = "name";

private static final String SQL_TABLE_CREATE = "create table "

+ TABLE_NAME + "("

+ COLUMNS_NAME + " text"

+ ");";

@Override

public void onCreate(SQLiteDatabase db) {

db.execSQL(SQL_TABLE_CREATE);

}

然后,獲取db對象:

DBHelper mDBHelper = new DBHelper(this);

SQLiteDatabase mDB = mDBHelper.getWritableDatabase();

好了,我們的準備工作做完了,接下來開始測試。

1.常規的插入方法

首先,是常規的插入操作,假設我要插入100000條數據。代碼如下:

for(int i = 0 ; i < 100000 ; i++){

ContentValues values = new ContentValues();

values.put(COLUMNS_NAME, "name: " + i);

mDB.insert(TABLE_NAME, null, values);

}

在我的小米8手機上,100000條數據的插入時間大概有12秒多,非常不能接受!

2.優化的插入方法

那我們怎么優化呢?其實很簡單,就是把所有的插入操作都包含在一個Transaction(事務)里:

mDB.beginTransaction();

try{

for(int i = 0 ; i < 100000 ; i++){

ContentValues values = new ContentValues();

values.put(COLUMNS_NAME, "name: " + i);

mDB.insert(TABLE_NAME, null, values);

}

mDB.setTransactionSuccessful();

}finally {

mDB.endTransaction();

}

經過這個小小的改動,插入時間大概只需要2秒多!提示了6倍多,厲不厲害!

可能有同學會問:為什么批量插入操作放在Transaction里可以把速度提示這么多?

其實原因也很簡單,在Android SQLite里,對所有的寫入操作(insert、update)等,都會在底層默默創建一個Transaction來完成。如果上層已經創建Transaction了(我們第二個例子),底層則不會再次創建。

所以,在我們的第一種寫法里,背后還隱藏著100000次創建Transaction的操作!而第二種寫法,只有一次創建Transaction的操作。把這部分開銷省掉了,速度自然能大幅提示。

還能不能再快點?

其實第二種寫法還有一個地方可以優化下,就是重用ContentValues對象。代碼如下:

mDB.beginTransaction();

try{

ContentValues values = new ContentValues();

for(int i = 0 ; i < 100000 ; i++){

values.put(COLUMNS_NAME, "name: " + i);

mDB.insert(TABLE_NAME, null, values);

values.clear();

}

mDB.setTransactionSuccessful();

}finally {

mDB.endTransaction();

}

在循環外只創建一個ContentValues對象,然后在每次使用完之后clear掉,下次循環繼續使用。

在實際測試過程中,這樣還能稍微提升一點點速度,這基本上也是批量插入的最優實踐了。

總結

以上是生活随笔為你收集整理的android sqlite批量操作,Android: SQLite批量插入数据的最佳实践的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。