主キーからレコードを検索
前述の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″ではない。