主キーからレコードを検索
前述のIDBObjectStoreオブジェクトのget()メソッドを使って、主キーからレコードを検索することができる。
次のサンプルでは主キーの値が99のレコードを検索する。
<script type="text/javascript">
$(function(){
var result = $('#result');
// IDBFactoryオブジェクトを取得
var idb = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB;
if( !idb ) {
$('<p>indexedDBをサポートしていない</p>').appendTo(result);
return;
}
$('#exec').click(function(){
// データベース名を得る
var input_el = document.querySelector("#name");
var valid = input_el.checkValidity();
if(valid === false){
alert(input_el.validationMessage);
return;
}
// DB接続
var dbname = input_el.value;
var openreq = idb.open(dbname,1);
// DB接続に失敗したときの処理
openreq.onerror = function(event){
var error = event.taget.error;
$('<p>DB接続に失敗しました ' + error.name + ' ' + error.message + '</p>').appendTo(result);
}
// DB接続に成功したときの処理
openreq.onsuccess = function(event){
// IDBDatabaseオブジェクトを取得
var db = event.target.result;
// IDBTransactionオブジェクトを取得
var transaction = db.transaction(["mystore"],"readonly");
// IDBObjectStoreオブジェクトを取得
var store = transaction.objectStore("mystore");
// 主キーからレコードを検索開始(IDBRequestオブジェクト)
var getreq = store.get(99);
getreq.onsuccess = function(event){
// 検索されたレコード
var rec = event.target.result;
if(rec){
$('<p>ID:' + rec.id + ', name:' + rec.name + ', price:' + rec.price + '</p>').appendTo(result);
}else{
$('<p>レコードが見つかりませんでした。</p>').appendTo(result);
}
db.close();
}
}
});
});
</script>
</HEAD>
<BODY>
<p>主キーからレコードを検索</p>
<form action="#" method="post" id="register">
<label for="name">データベース名:</label>
<input type="text" name="name" id="name" required>
<input id="exec" type="button" value="実行">
</form>
<div id="result"></div>
</BODY>
①get()メソッドの検索処理は非同期である。このメソッドから得られたIDBRequestオブジェクト(変数getreq)のonsuccessプロパティにコールバック関数をセットする。
②このコールバック関数では引数から受け取ったイベントオブジェクトのtarget.resultプロパティから、検索されたレコードのオブジェクトを取得する。
③今回は、get()メソッドの引数に指定した主キーの値は99である。保存されている主キーは自動採番を使っているため、文字列の”99″ではない。