最近、サーバーから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 アプリ の 研究所 アンドロイド ナビ