Tips

HTML5 Chormeで動作するindexedDB サンプル1 【入門編 第2回】

indexDB

1.indexedDBをオープンします。

/* Chromeのみなので、こんな書き方をしなくても良いのですが。 */
if (window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB) {
	var indexedDB		= window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB;
	var IDBTransaction	= window.IDBTransaction || window.webkitIDBTransaction || window.mozIDBTransaction;
	var IDBKeyRange		= window.IDBKeyRange || window.webkitIDBKeyRange || window.mozIDBKeyRange;
	var IDBCursor		= window.IDBCursor || window.webkitIDBCursor;

	/* IndexedDBをオープンします。*/
	var IDBreq	= indexedDB.open(idbProp.name);
} else {
	alert('このブラウザではindexedDB は利用できません');
}

2.オブジェクト・ストアを作成します。

/* IndexedDBオープン成功時に呼び出されるコールバック関数 */
IDBreq.onsuccess	= function (event) {
	idb	= this.result;
	/* IndexedDBのバージョン・チェック */
	if (idbProp.ver != idb.version) {
		/* IndexedDBにバージョンをセット */
		var req	= idb.setVersion(idbProp.ver);
		/* バージョン・セット成功時に呼び出されるコールバック関数 */
		req.onsuccess	= function (event) {
			/* オブジェクト・ストアの作成 */
			var store	= idb.createObjectStore(
				idbProp.storeName,
				{ keyPath: 'sKey', autoIncrement: false }
			);
			/* 検索キーを作成します */
			var index	= store.createIndex('indexKey', 'sKey');
		};
	}
};

3.データを登録します。

/* ボタンを押下しデータを登録します。 */
$('#set').click(function(){
	/* トランザクション経由でオブジェクトの保存 */
	var trans	= idb.transaction(idbProp.storeName, IDBTransaction.READ_WRITE);
	var store	= trans.objectStore(idbProp.storeName);

	/* データの内容 */
	var data	= {
		sKey : $('#skey').val(),
		title : $('#title').val(),
		content : $('#content').val(),
		postDate : getDate()
	};
	/* データをセットします */
	var res	= store.put(data);
});

4.データを検索します。

/* ボタンを押下しデータを検索します。 */
$('#show').click(function(){
	var key		= $('#getkey').val();
	/* トランザクション経由でオブジェクトの取得 */
	var trans	= idb.transaction(idbProp.storeName, IDBTransaction.READ_WRITE);
	var store	= trans.objectStore(idbProp.storeName);
	var req		= store.get(key);

	req.onsuccess = function (event) {
		if (this.result === undefined) {
			alert('指定キーで保存されているデータはありません');
		} else {
			listout(this.result.sKey, this.result.title, this.result.content, this.result.postDate, false);
		}
	};
});

5.レンジを作成し、データを検索します。

/* ボタンを押下しデータを検索します。 */
$('#showIndex').click(function(){
	/* レンジの作成 */
	var range	= IDBKeyRange.bound('0', '99999999');
	var trans	= idb.transaction(idbProp.storeName, IDBTransaction.READ_WRITE);
	var store	= trans.objectStore(idbProp.storeName);

	/* インデックスからデータを検索し取得 */
	var req		= store.openCursor(range, IDBCursor.NEXT);
	$('#list').html('');

	req.onsuccess	= function (event) {
		if (this.result === undefined) {
			/* データが無い場合の処理 */
			alert('検索結果がありません。');
		} else {
			if(this.result != null){
				listout(this.result.value.sKey, this.result.value.title, this.result.value.content, this.result.value.postDate, true);
				/* 次の検索結果でonsuccessコールバック関数を呼び出す */
				this.result.continue();
			}
		}
	};
});

次回に全体ソースを載せる予定です。
お楽しみに!

関連リンク

MOZILLA DEVELOPER NETWORK
http://developer.mozilla.org/ja/IndexedDB/

HTML5 ROCKS
http://www.html5rocks.com/ja/tutorials/indexeddb/todo/

へっぽこプログラマーの日記
http://d.hatena.ne.jp/pikotea/20110120/1295494166

HTML・CSSリファレンス 連載はこちら!

HTML・CSSリファレンス 連載目次

Recent News

Recent Tips

Tag Search