Indexed Database APIによるデータベース (4/7)
作成:2011-09-19 09:26
更新:2012-04-09 16:18
更新:2012-04-09 16:18
■add/putによるデータの追加・削除
では、いよいよデータベースを利用します。まずはデータの追加から行ってみましょう。データの追加は、データストア(IDBObjectStore)に用意されている「add」または「put」というメソッドを用いて行います。これらは以下のように呼び出します。
addとputは、いずれも同じものですので、使いやすい方を使えばいいでしょう。今のところ、FirefoxもChromeも両方をサポートしているようです。注意すべきは、オブジェクトストアに保存するデータの形式でしょう。【IDBObjectStore】.add( 連想配列 );
【IDBObjectStore】.put( 連想配列 );
add/putに保存するデータは、連想配列の形でデータをまとめておきます。オブジェクトストアでは、それぞれのデータには、そのデータの保管場所の名前(キー)が指定されます。これを使って、それぞれのキーごとに値を指定しておくのです。
このとき注意しておきたいのは、「必ずインデックスに指定したキーの値を含める」という点です。先に、createObjectStoreでオブジェクトストアを作成した際、{ keyPath: "name" }という引数を指定していたのを思い出してください。これで、"name"という項目がデータの管理に用いられることが指定されました。ということは、保管するデータには必ずnameという項目の値を用意しておく、ということになるわけです。
もう1つ、add/putで注意したいのは、実は「IDBObjectStoreの用意」に関する部分です。オブジェクトストアを取得する際、transaction(オブジェクトストア名)というメソッドを呼び出してIDBTransactionを取得し、そのobjectStoreでオブジェクトを取り出します。が、これだけだと、add/putでは例外が発生し、データの保管はできないのです。なぜか?というと、transaction()で取得されるIDBTransactionからは、「読み取り専用」のオブジェクトストアしか取得されないからです。
すなわち、読み取り専用のオブジェクトストアでは、データの保存ができないのです。読み書き可能なオブジェクトストアを取得するためには、transaction時に第2引数を指定してやる必要があります。
transaction("mydata",IDBTransaction.READ_WRITE);
関数でオブジェクトを設定した変数でしたね。
■データの削除
続いて、データの削除についても触れておきましょう。これもIDBTransaction.READ_WRITEを指定してオブジェクトストアを用意します。そして、以下のように「delete」を呼び出します。【IDBObjectStore】.delete( キーの値 );