DB への INSERT 処理の高速化

最近、サーバーからXMLやJSONでデータリストを取ってきて、アプリ内の SQL...

DB への INSERT 処理の高速化

mixiチェック

最近、サーバーから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 逆引きハンドブック』

Android アプリ の 研究所 アンドロイド ナビ:新着記事

incorrect AVA format エラー(署名作成時) : 2012年2月25日
署名作成時に Keytool-error: java.io.IOExceptio...
アイデアがどんどん湧く! 9マスメモアプリ : 2011年11月13日
先日、2011年11月11日の11時11分。 この100年に一度の1ならび、 し...
Androidで電子書籍 : 2011年11月 5日
Androidアプリの開発者として また純粋にAndroidのファンとして 日夜...
Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE : 2011年11月 5日
Eclipse から実機にアプリをインストールするときに 下記のエラーが出ました...
iPhone4S へ iPhone3GS のデータが移行されない時の対処方法 : 2011年10月23日
iPhone4Sをやっと手に入れることができました。 購入したのは、64GB の...
たーかーのーつーめー : 2011年10月22日
「たーかーのーつーめー」 でおなじみの『鷹の爪団』。 その中で活躍する『吉田くん...
iPhone4S の新音声機能である Siri がすごいらしい : 2011年10月13日
iPhone4S のみで使える新機能である Siri がすごいと話題です。 ちな...
iPhone4S を買うなら SoftBank ? au ? : 2011年10月10日
ついに iPhone4S の予約が SoftBank と au から10/7(金...
画面サイズとVGAとかの対応表 : 2011年10月 7日
Andoridの端末には様々な画面サイズがあります。 それぞれの画面サイズに最適...
iPhone のように指にくっついてスライドするUI : 2011年10月 7日
iPhone では、画面に表示されている写真などを入れ替えるとき、指で左右にフリ...

▽DB への INSERT 処理の高速化 にトラックバックする

DB への INSERT 処理の高速化のトラックバックURL:
http://chu3.xsrv.jp/mt5/mt-tb.cgi/1120

今日のキーワード

当サイトのRSS

カテゴリー

Twitterボタン

アンドロイドナビについて / 記事投稿してみませんか? / イベント情報募集
Copyright (C) 2012 All Rights Reserved Android アプリ の 研究所 アンドロイド ナビ