Web SQL DatabaseとIndexed Database API
データベースのオープンとObjectStoreの作成/オープン
それでは、Indexed Database APIの基本的な使い方を解説します。
まず、データベースを開くことから始めます。これは、indexedDBというオブジェクトの「open」というメソッドで行います。
indexedDB.open(データベース名, データベースの概要名)
このメソッドの戻り値は、オブジェクトになっています。このオブジェクトのonsuccessプロパティに、データベースを開くことに成功した時に実行する関数を指定します。関数のパラメータのオブジェクトには「result」というプロパティがあり、これがデータベースのオブジェクトを指します。
例えば、名前が「sample」で、概要が「Sample Database」のデータベースを開く場合、以下のような手順で処理をします。変数dbがデータベースを指します。
なお、Firefox 4 β6では、「indexedDB」ではなく「moz_indexedDB」と書く必要があります。
データベースを開いたら、次にObjectStoreを作成するか、または既存のObject Storeを開きます。
ObjectStoreを作る場合は、データベースのオブジェクトに対し、「createObjectStore」というメソッドを実行します(表7)。
db.createObjectStore(ObjectStore名, KeyPath, 自動連番)
表7: createObjectStoreメソッドのパラメータ
パラメータ | 内容 |
---|---|
ObjectStore名 | ObjectStoreの名前 |
KeyPath | 保存するオブジェクトのうち、キーとして使うプロパティの名前 |
自動連番 | このパラメータにtrueを渡すと、キーのプロパティに自動的に連番が付けられる |
一方、既存のObjectStoreを開く場合は、「objectStore」というメソッドを実行します。2つ目のパラメータの「0」は、ObjectStoreを読み書き可能にすることを意味します。
db.objectStore(ObjectStore名, 0);
createObjectStore/objectStoreメソッドともに、戻り値がObjectStoreオブジェクトを指します。
例えば、以下のようにObjectStoreを作りたいとします。
- 名前はaddress
- 「id」というプロパティに自動的に連番を振る
- 戻り値のオブジェクトを変数addrに割り当てる
この場合、以下のように書きます。
addr = db.createObjectStore('address', 'id', true);
データの読み書き
ObjectStoreを開いたら、そのオブジェクトのputメソッドで、オブジェクトを保存することができます。例えば、前述のように変数addrにObjectStoreを割り当てた場合、以下のように書くと、そのObjectStoreに表8のオブジェクトを保存することができます。
addr.put({ name : '山田太郎', address : '東京都' });
表8: 保存するオブジェクト
プロパティ | 値 |
---|---|
name | 山田太郎 |
address | 東京都 |
また、getというメソッドでオブジェクトを読み込むことができます。パラメータとして、オブジェクトのKeyを指定します。例えば、addrというObjectStoreから、Keyが1になっているオブジェクトを読み込むには、以下のように書きます。
addr.get(1);
getメソッドの戻り値のオブジェクトには、「onsuccess」というプロパティがあります。このプロパティに、読み込みに成功した時に実行する関数を指定します。以下のように書くと、読み込んだオブジェクトが変数objに代入されます。
ここまでで説明したほかに、ObjectStoreにインデックスを設定してオブジェクトを検索したり、カーソルを使ってオブジェクトを順に読み込んだりすることも可能です。