最近、サーバーからXMLやJSONでデータリストを取ってきて、アプリ内の SQLite のデータベースに挿入処理をするアプリを作ることが多くなってきました。
最初は取得してきたデータ一件一件に対して INSERT 処理を行なっていたんですが、件数が多くなるとどうも処理が重い・・・。
どうにかして INSERT処理を高速化できないか探していたんですが、どうも beginTransaction() を使って一括挿入をすると早いようです。
db.insert() とかを使うと、一件ごとにコミット処理が行なわれ、それが遅くなる原因となるみたいなんですが、 beginTransaction() を使うと全体でまとめて1回のコミット処理になるらしく、高速化が見込めるようです。
<INSERT処理の高速化のサンプル>
//SEARCH_TABLEのバルクインサート
public static void bulkInsertSearchData(
SQLiteDatabase db,
ArrayList<SearchItem> searchData) {
db.beginTransaction();
try {
SQLiteStatement stmt = db.compileStatement("INSERT INTO "+DB_SEARCH_TABLE+" values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?);");
for (int i=0; i<searchData.size(); i++) {
SearchItem item = searchData.get(i);
stmt.bindString(2, item.getFirstCatId());
stmt.bindString(3, item.getFirstCatName());
stmt.bindString(4, item.getSecoundCatId());
stmt.bindString(5, item.getSecoundCatName());
stmt.bindString(6, item.getSecoundCatUrl());
stmt.bindString(7, item.getThirdCatId());
stmt.bindString(8, item.getThirdCatName());
stmt.bindString(9, item.getThirdCatUrl());
stmt.bindString(10, item.getThirdText());
stmt.executeInsert();
}
db.setTransactionSuccessful();
Log.v("CHECK", "Bulk insert is succeeded.");
} finally {
db.endTransaction();
}
}
まず db.beginTransaction() でトランザクションを開始し、
db.compileStatement() で INSERT の処理文を記述します。
処理件数分だけループを回して
bindString() で挿入する値をバインドし、
executeInsert() で挿入処理を行います。
挿入処理がうまく終了したら
setTransactionSuccessful() でトランザクションの成功を通知し
endTransaction() でトランザクションを終了します。
単なる INSERT処理からこの一括処理に変えたら、かなり速くなりました。
大量のデータを INSERT する時には使ってみてください。
ユーザーのストレスも軽減です。
▽DB への INSERT 処理の高速化 のキーワード
▽次の記事、前の記事
画像付き ListView で特定の画像だけダウンロードできない問題 | この本が素晴らしい!『Android SDK 逆引きハンドブック』
▽DB への INSERT 処理の高速化 にトラックバックする
DB への INSERT 処理の高速化のトラックバックURL:
http://chu3.xsrv.jp/mt5/mt-tb.cgi/1120
今日のキーワード
当サイトのRSS
カテゴリー
スポンサード リンク
新着記事
月別アーカイブ
オススメ書籍
【中級者必携の3冊】
目的から実現方法を探すいわゆる逆引き本。ネットで探してた情報が1冊にまとまっている感じです。
こちらも逆引き本。しかも情報量が多くて分厚い辞書的な1冊。必ず手元に置いておきたい1冊です。
様々なUIテクニックが載っている1冊。レイアウト関係でここまで詳しい本は他にありません。UIに強くなりたいなら必須。
Copyright (C) 2012 All Rights Reserved Android アプリ の 研究所 アンドロイド ナビ