html5 indexed database api

53

Upload: tim2063

Post on 16-Apr-2015

2.232 views

Category:

Documents


4 download

DESCRIPTION

HTML5, Indexed Database API

TRANSCRIPT

23

Indexed Database API

23.1 Indexed Database Web SQL Database 23.2 23.3 23.4 23.5 IDBFactory IDBDatabase 23.5.1 23.5.2 23.5.3

23.7 23.8 23.8.1 23.8.2 23.8.3 23.8.4

SUMMARY

23.6 23.6.1 IDBObjectStore 23.6.2 23.6.3 cursor 23.6.4 23.6.5

23-2

HTML5 ()

11.1 HTML5 HTML5 PART 1

Indexed Database API

HTML5 ()

23-3

23

Indexed Database API

Indexed Database HTML5 ndexed Database API

23.1 Indexed Database Web SQL DatabaseIndexed Database Web SQL Database API Client Web SQL Database W3C 2010 11 W3C Web SQL Database http://www.w3.org/TR/webdatabase/ Abstract

HTML5 Web Web Storage Indexed Database API The Web Applications Working Group continues work on two other storagerelated specifications: Web Storage and Indexed Database API.

W3C Web SQL Database HTML5 SQL Web SQL Database Web SQL Database Indexed Database API 23-2HTML5 ()

23.2IDBFactory

Indexed Database API SQL cursor SQL Indexed Database API SQL API

23.2 IDBFactory database Indexed Database API

object store Indexed Database API IDBFactory

HTML5 ()

23-3

23

Indexed Database API

interface IDBFactory { IDBOpenDBRequest open (DOMString name, [EnforceRange] optional unsigned long long version); IDBOpenDBRequest deleteDatabase (DOMString name); short cmp (any first, any second); };

open() name deleteDatabase name cmp rst second 1 -1 0 open() delete() IDBRequest IDBOpenDBRequest IDBRequest interface IDBRequest : EventTarget { readonly attribute any result; readonly attribute DOMError error; readonly attribute Object source; readonly attribute IDBTransaction transaction; readonly attribute DOMString readyState; [TreatNonCallableAsNull] attribute Function? onsuccess; [TreatNonCallableAsNull] attribute Function? onerror; };

result error source transaction readyState onsuccess onerror pending done success error

23-4

HTML5 ()

23.3

open Indexed Database API

23.3 IDBFactory open() IDBFactory Webkit webkitIndexedDB Gecko mozIndexedDB open() KTMSvar request = webkitIndexedDB.open('KTMS');

Webkit Gecko mozIndexedDB indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB ;

open() var request = indexedDB.open('KTMS');

KTMS open() IDBRequest request onsueecss onerror request.onerror = function (event) { // }; request.onsuccess = function (event) { // event.target.result };

onsuccess event.target.result IDBDatabase

HTML5 ()

23-5

23

Indexed Database API

IDBRequest readyState done pending 23-1

dbopen.html var db; var request = webkitIndexedDB.open('KTMS'); request.onerror = function (event) { alert(event.target.errorCode); }; request.onsuccess = function (event) { db = event.target.result; alert(' [readyState' + this.readyState + ']'); };

open() KTMS success db readyState db IDBDatabase

23-6

HTML5 ()

23.4 IDBDatabase

23.4 IDBDatabase IDBDatabase interface IDBDatabase : EventTarget { readonly attribute DOMString name; readonly attribute unsigned long long version; readonly attribute DOMStringList objectStoreNames; IDBObjectStore createObjectStore (DOMString name, optional IDBObjectStoreParameters optionalParameters); void deleteObjectStore (DOMString name); IDBTransaction transaction (any storeNames, optional DOMString mode); Void close (); [TreatNonCallableAsNull] attribute Function? onabort; [TreatNonCallableAsNull] attribute Function? onerror; [TreatNonCallableAsNull] attribute Function? onversionchange; };

IDBDatabase name version objectStoreNames createObjectStore deleteObjectStore transaction close onabort onerror onversionchange DOMStringList IDBObjectStore abort error versionchange

objectStoreNames DOMStringList createObjectStore()

HTML5 ()

23-7

23

Indexed Database API

IDBObjectStore deleteObjectStore() createObjectStore() deleteObjectStore() close() void close();

closePending true closePending false true

23.5

23.5.1 IDBDatabase version version long var request = indexedDB.open('KTMS', n);

23-8

HTML5 ()

23.5

open() n n KTMS upgradeneeded n n error upgradeneeded 23-2

62 65

66

HTML5 ()

23-9

23

Indexed Database API

dbVersion-demo.html

messagev id version dbname KTMS onload window.onload = function () { requestName = document.getElementById('dbname').value; request = indexedDB.open(requestName); request.onsuccess = function (event) { db = event.target.result; document.getElementById('messagev').innerHTML = ' ' + db.name + ' / ' + db.version; db.close(); }; };

name 23-10HTML5 ()

23.5

version function click_handler() { var version = parseInt(document.getElementById('version').value); request = indexedDB.open(requestName, version); request.onerror = function (event) { document.getElementById('message').innerHTML = ' ' + event.target.errorCode; }; request.onsuccess = function (event) { db = event.target.result; document.getElementById('message').innerHTML = (' /' + db.version); }; request.onupgradeneeded = function (event) { alert(' ' + event.oldVersion + '/' + event.newVersion); alert(' ' + event.target.result.version); }; db.close(); }

open() version upgradeneeded event oldVersion newVersion error success upgradeneeded

23.5.2 IDBDatabase objectStoreNames

HTML5 ()

23-11

23

Indexed Database API

readonly attribute DOMStringList objectStoreNames;

DOMStringList 23-3

KTMS KTMS objectStore-list.html var reuestName = 'KTMS'; var version; var indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB; function listObjectSore() { var request = indexedDB.open(reuestName); request.onsuccess = function (event) { db = event.target.result; var stores = db.objectStoreNames; var length = db.objectStoreNames.length; var storenames = ''; for (var i = 0; i < length; i++) {

()

23-12

HTML5 ()

23.5

storenames += '' + stores[i] + ''; } version = db.version; document.getElementById('message').innerHTML = ' / ' + db.name + '/' + db.version + '' + '

  • ' + storenames + '

'; db.close(); }; } window.onload = function () { listObjectSore(); };

KTMS db objectStoreNames for

  • 23.5.3 IDBDatabase createObjectStore IDBObjectStore createObjectStore ( DOMString name, optional IDBObjectStoreParameters optionalParameters);

    name optionalParameters DOMException InvalidStateError ConstraintError InvalidAccessError versionchange autoIncrement ture keyPath

    HTML5 ()

    23-13

    23

    Indexed Database API

    InvalidStateError createObjectStore() upgradeneeded ConstraintError name InvalidAccessError createObjectStore() IDBObjectStore deleteObjectStore() Void deleteObjectStore (DOMString name);

    name InvalidStateError NotFoundError versionchange

    NotFoundError InvalidStateError createObjectStore() createObjectStore() deleteObjectStore()

    23-14

    HTML5 ()

    23.5

    23-4

    23-3 objectStore-demo.html var requestName = 'KTMS'; var version; var indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB; function addOS() { version++; var db; var request = indexedDB.open(requestName, version); request.onupgradeneeded = function (event) { try{ var osname = document.getElementById('osname').value; db = event.target.result;

    ()

    HTML5 ()

    23-15

    23

    Indexed Database API

    var objectStore = db.createObjectStore(osname); alert(' !'); } catch (e) { alert(e.toLocaleString()); } finally { db.close(); listObjectSore(); } } } function deleteOS() { version++; var db; var request = indexedDB.open(requestName, version); request.onupgradeneeded = function (event) { try { var osname = document.getElementById('osname').value; db = event.target.result; db.deleteObjectStore(osname); alert(' !'); } catch (e) { alert(e.toLocaleString()); } finally { db.close(); listObjectSore(); } } } function listObjectSore() { // } window.onload = function () { listObjectSore(); };

    addOS() createObjectStore() try-catch click deleteOS() deleteObjectStore() try-catch

    23-16

    HTML5 ()

    23.6

    listObjectSore()

    23.6 IDBObjectStore

    23.6.1 IDBObjectStore Indexed Database Object Store Table record IDBObjectStore interface IDBObjectStore { readonly attribute DOMString name; readonly attribute DOMString keyPath; readonly attribute DOMStringList indexNames; readonly attribute IDBTransaction transaction; readonly attribute boolean autoIncremenent;; IDBRequest put (any value, optional any key); IDBRequest add (any value, optional any key); IDBRequest delete (any key); IDBRequest get (any key); IDBRequest clear (); IDBRequest openCursor (optional any? range, optional DOMString direction); IDBIndex createIndex (DOMString name, any keyPath, optional IDBIndexParameters optionalParameters); IDBIndex index (DOMString name); void deleteIndex (DOMString indexName); IDBRequest count (optional any key); };

    nameHTML5 ()

    23-17

    23

    Indexed Database API

    null keyPath key key path indexNames transaction autoIncremenent put() add() delete() get() clear() createIndex() index() deleteIndex() openCursor() count() value IDBCursorWithValue cursor key IDBRequest

    IDBObjectStore

    23.6.2 createObjectStore() IDBObjectStore IDBTransaction IDBDatabase transaction() var transaction = db.transaction([objectStoreName]); var store = transaction.objectStore(objectStoreName);

    23-18

    HTML5 ()

    23.6

    db objectStoreName objectStoreName objectStore() Transaction() IDBTransaction transaction ( any storeNames, optional DOMString mode);

    readonly readwrite versionchange

    transaction() InvalidStateError NotFoundError TypeError InvalidAccessError transaction() IDBDatabase Close() mode

    CRUD IDBTransaction objectStore() IDBObjectStore objectStore (in DOMString name)

    name name NotFoundError objectStore() IDBObjectStore

    HTML5 ()

    23-19

    23

    Indexed Database API

    add() delete()

    23.6.3 cursor Cursor IDBObjectStore openCursor() IDBRequest openCursor ( optional any? range, optional DOMString direction)

    success IDBCursorWithValue cursor success interface IDBCursorWithValue : IDBCursor { readonly attribute any value; };

    value IDBCursor key IDBCursor interface IDBCursor { readonly attribute Object source; readonly attribute DOMString direction; readonly attribute any key; readonly attribute any primaryKey; IDBRequest update (any value); void advance ([EnforceRange] unsigned long count); void continue (optional any key); IDBRequest delete (); }

    key continue() 23-20HTML5 ()

    23.6

    openCursor() IDBRequest 23-5 cursor

    objectStore-data-list.html var reuestName = 'KTMS'; var objectStoreName = 'OS1'; var db; var indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB; function list() { try { var transaction = db.transaction([objectStoreName]); var store = transaction.objectStore(objectStoreName); var crequest = store.openCursor() var message = '

    • '; crequest.onsuccess = function (event) { var cursor = event.target.result; if (cursor) { message += ( '
    • ' + key/value" + '' + cursor.key + "/" + cursor.value +

      ()

      HTML5 ()

      23-21

      23

      Indexed Database API

      ''); cursor.continue(); } else { message += '

    ' } document.getElementById('message').innerHTML = message; }; } catch (e) { alert(e); } } window.onload = function () { var request = indexedDB.open(reuestName); request.onsuccess = function (event) { db = event.target.result; list(); }; };

    list() openCursor() cursor success event cursor key cursor continue() success

    23.6.4 IDBObjectStore add() IDBRequest add (any value, optional any key);

    value 23-22HTML5 ()

    23.6

    TransactionInactiveError ReadOnlyError DataError InvalidStateError DataCloneError

    key

    try-catch delete() add() IDBRequest delete (in any key)

    key key TransactionInactiveError ReadOnlyError add() add() delete() 23-6

    key/value HTML5 ()

    23-23

    23

    Indexed Database API

    objectStore-data.html var reuestName = 'KTMS'; var objectStoreName = 'OS1'; var db; var indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB; function delete_click() { try { var transaction = db.transaction( [objectStoreName], 'readwrite'); transaction.oncomplete = function (event) { alert(' !'); }; transaction.onerror = function (event) { alert(event); }; var store = transaction.objectStore(objectStoreName); var key = document.getElementById('key').value; // var request = store.delete(key); request.onsuccess = function (event) { list(); }; request.onerror = function (event) { alert(event); }; } catch (e) { alert(e); } } function add_click(){ try { var transaction = db.transaction( [objectStoreName], 'readwrite'); transaction.oncomplete = function (event) { alert(' !'); }; transaction.onerror = function (event) { alert(event); }; // var store = transaction.objectStore(objectStoreName); var value = document.getElementById('value').value;

    ()

    23-24

    HTML5 ()

    23.6

    var key = document.getElementById('key').value; var request = store.add(value, key); request.onsuccess = function (event) { list(); }; request.onerror = function (event) { alert(event); }; } catch (e) { alert(e); } } window.onload = function () { var request = indexedDB.open(reuestName); request.onsuccess = function (event) { db = event.target.result; list(); }; }; function list() { // } key/value /

    add_click() add() delete_click() key readwrite HTML5 ()

    23-25

    23

    Indexed Database API

    var objectStore = db.createObjectStore(osname, {autoIncrement: true });

    createObjectStore() autoIncrement true OSAI {autoIncrement: true } 23-7

    1 bjectStore-data-auto.html var reuestName = 'KTMS'; var objectStoreName = 'OSAI'; var db; var indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB; function add_click(){ try {

    ()

    23-26

    HTML5 ()

    23.6

    var transaction = db.transaction([objectStoreName], 'readwrite'); // var store = transaction.objectStore(objectStoreName); var value = document.getElementById('value').value; var request = store.add(value); request.onsuccess = function (event) { list(); }; request.onerror = function (event) { alert(event); }; } catch (e) { alert(e); } } window.onload = function () { var request = indexedDB.open(reuestName); request.onsuccess = function (event) { db = event.target.result; list(); }; }; function list() { // }

    add() OSAI 23.7

    23.6.5 get()

    HTML5 ()

    23-27

    23

    Indexed Database API

    IDBRequest get (any key);

    key DataError 23-8

    key objectStore-data-get.html var reuestName = 'KTMS'; var objectStoreName = 'OS1'; var db; var indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB; var request = indexedDB.open(reuestName); request.onsuccess = function (event) { db = event.target.result; }; function search_click() { try { var transaction = db.transaction([objectStoreName]); var store = transaction.objectStore(objectStoreName); var key = document.getElementById('key').value; var request = store.get(key); request.onsuccess = function (event) { var value = request.result; document.getElementById('message').innerHTML = 'key/value' + key + '/' + value; };

    ()

    23-28

    HTML5 ()

    23.7

    request.onerror = function (event) { alert(event); }; } catch (e) { alert(e); } } key

    get() success

    23.7 JSON indexed Database API { ProductID: 1000001", ProductName: USB 3.0 ", Category: " ", UnitPrice: 1200 }

    JSON ProductID ProductName Category UnitPrice

    JSON JSON HTML5 ()

    23-29

    23

    Indexed Database API

    JSON ProductID ProductID var objectStore = db.createObjectStore('products',{keypath:ProductID});

    createObjectStore() products ProductID JSON {keypath:ProductID} Products 23-9 JSON

    JSON

    23-30

    HTML5 ()

    23.7

    objectStore-data-json-list.html var reuestName = 'KTMS'; var objectStoreName = 'Products'; var db; var indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB; function list() { try { var transaction = db.transaction([objectStoreName]); var store = transaction.objectStore(objectStoreName); var crequest = store.openCursor() var message = '

    • '; crequest.onsuccess = function (event) { var cursor = event.target.result; if (cursor) { message += ('
    • ' + id" + cursor.key + "
      " + cursor.value.ProductName + "
      " + cursor.value.UnitPrice + "
      " + cursor.value.Category); cursor.continue(); } else { message += '

    ' } document.getElementById('message').innerHTML = message; }; } catch (e) { alert(e); } } window.onload = function () { var request = indexedDB.open(reuestName); request.onsuccess = function (event) { db = event.target.result; list(); }; };

    cursor JSON HTML5 ()

    23-31

    23

    Indexed Database API

    message += ('

  • ' + JSON.stringify(cursor.value));

    ProductID Products 23-10

    objectStore-data-json.html div {margin:10px;width:400px;text-align:left; } var reuestName = 'KTMS'; var objectStoreName = 'Products'; var db; var indexedDB = window.indexedDB || window.mozIndexedDB ||

    ()

    23-32

    HTML5 ()

    23.7

    window.webkitIndexedDB; function add_click() { try { var transaction = db.transaction( [objectStoreName], 'readwrite'); transaction.oncomplete = function (event) { alert(' !'); }; transaction.onerror = function (event) { alert(event); }; // var store = transaction.objectStore(objectStoreName); var data = { ProductID: document.getElementById('ProductID').value, ProductName: document.getElementById('ProductName'). value, Category: document.getElementById('Category').value, UnitPrice: parseInt( document.getElementById('UnitPrice').value) } var request = store.add(data); request.onsuccess = function (event) { alert(' !'); }; request.onerror = function (event) { alert(' '+event.message ); }; } catch (e) { alert(e); } } window.onload = function () { var request = indexedDB.open(reuestName); request.onsuccess = function (event) { db = event.target.result; }; };



    HTML5 ()

    23-33

    23

    Indexed Database API

    add_Clilck() add() JSON data JSON Indexed Database API

    23.8

    23.8.1 IDBIndex interface IDBIndex { readonly attribute DOMString name; readonly attribute IDBObjectStore objectStore; readonly attribute DOMString keyPath; readonly attribute boolean multiEntry; readonly attribute boolean unique; IDBRequest openCursor (optional any? range, optional DOMString direction); IDBRequest openKeyCursor (optional any?range, optional DOMString direction); IDBRequest get (any key); IDBRequest getKey (any key); IDBRequest count (optional any key); };

    name objectStore ()

    23-34

    HTML5 ()

    23.8

    keyPath multiEntry unique openCursor openKeyCursor get getKey count

    multiEntry unique cursor cursor

    23.8.2 IDBObjectStore indexNames readonly attribute DOMStringList indexNames;

    DOMStringList 23-11

    HTML5 ()

    23-35

    23

    Indexed Database API

    KTMS index-list.html var requestName= 'KTMS'; var objectStoreName = 'Products93'; var version; var db; var indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB; window.onload = function () { var request = indexedDB.open(requestName); request.onsuccess = function (event) { db = event.target.result; version = db.version; var transaction = db.transaction([objectStoreName]); var store = transaction.objectStore(objectStoreName); var indexes = store.indexNames var msg = '

    • '; var l = indexes.length; if (l > 0) { for (var i = 0; i < indexes.length; i++) { msg += ('
    • ' + indexes[i] + '/' + store.index(indexes[i]).keyPath + ''); } msg += '

    ' document.getElementById('message').innerHTML = msg; } else { console.log(' ! '); } db.close(); }; };

    success indexNames

    23-36

    HTML5 ()

    23.8

    0 0 for

    23.8.3 IDBObjectStore createIndex() IDBIndex createIndex ( DOMString name, any keyPath, optional IDBIndexParameters optionalParameters);

    name keyPath optionalParameters IDBIndexParameters dictionary dictionary IDBIndexParameters { boolean unique = false; boolean multiEntry = false; };

    unique false unique true createIndex() InvalidStateError ConstraintError

    HTML5 ()

    23-37

    23

    Indexed Database API

    23-12

    upgradeneeded index-createOS.html var requestName = 'KTMS'; var objectStoreName = 'OS'; var version; var indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB; var db; function addIDX() { version++; var request = indexedDB.open(requestName, version); request.onupgradeneeded = function (event) { try { db = event.target.result; var objectStore = db.createObjectStore( objectStoreName + version.toString()); var name = document.getElementById('idxname').value; var keyPath = document.getElementById('idxkeyPath').value; objectStore.createIndex(name, keyPath); alert(' !'); } catch (e) { alert(e.toLocaleString()); } finally { if (db) { db.close(); console.log(' '); }

    ()

    23-38

    HTML5 ()

    23.8

    } } } window.onload = function () { var request = indexedDB.open(requestName); request.onsuccess = function (event) { db = event.target.result; version = db.version; db.close(); } };

    createIndex() OS void deleteIndex(DOMString indexName);

    indexName indexName InvalidStateError ConstraintError

    HTML5 ()

    23-39

    23

    Indexed Database API

    23-13

    index-deom.html var requestName = 'KTMS'; var objectStoreName = 'Products'; var version; var db; var indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB; function list() { // } window.onload = function () { list(); }; function createIDX() { version++; var request = indexedDB.open(requestName, version); request.onupgradeneeded = function (event) { try {

    ()

    23-40

    HTML5 ()

    23.8

    db = event.target.result; var transaction = event.target.transaction; var store = transaction.objectStore(objectStoreName); var name = document.getElementById('idxName').value; var keyPath = document.getElementById('idxKeypath'). value; store.createIndex(name, keyPath); } catch (e) { alert(e); } finally { if (db) { db.close(); console.log(' '); } list(); } } } function deleteIDX() { version++; var request = indexedDB.open(requestName, version); request.onupgradeneeded = function (event) { try { db = event.target.result; var transaction = event.target.transaction; var store = transaction.objectStore(objectStoreName); var name = document.getElementById('idxName').value; store.deleteIndex(name); } catch (e) { alert(e.toLocaleString()); } finally { if (db) { db.close(); console.log(' '); } list(); } } }

    HTML5 ()

    23-41

    23

    Indexed Database API

    createIDX() createIndex() deleteIDX() deleteIndex()

    23.8.4 IDBIndex get() IDBRequest get (any key);

    key get() key get() JSON Products idx_cat Category {ProductID":"1000001","ProductName":"USB 3.0 ", "Category":" ","UnitPrice":1200} {"ProductID":"1000003","ProductName":"USB 3.0 U3 ", "Category":" ","UnitPrice":1250} {"ProductID":"1000009","ProductName":"Samsung i9100 Galaxy S2 ", "Category":" ","UnitPrice":5520} {"ProductID":"1000025","ProductName":"HTML5 ", "Category":" ","UnitPrice":780}

    get()

    23-42

    HTML5 ()

    23.8

    23-14

    get()

    Products index-get.html var requestName = 'KTMS'; var objectStoreName = 'Products'; var version; var indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB; var db; function list() { try { var transaction = db.transaction([objectStoreName]); var store = transaction.objectStore(objectStoreName); var idx = store.index('idx_cat'); idx.get(' ').onsuccess = function (event) { var request = event.target; if (request) document.getElementById('message').innerHTML = ' ' + event.target.result.ProductName; }; } catch (e) { alert(e); } finally { if (db) { db.close(); console.log(' !'); } }

    ()

    HTML5 ()

    23-43

    23

    Indexed Database API

    } window.onload = function () { var request = indexedDB.open(requestName); request.onsuccess = function (event) { db = event.target.result; list(); }; };

    index() idx_cat get() success IDBIndex openCursor() cursor 23-15

    cusor index-data-list.html

    ()

    23-44

    HTML5 ()

    23.8

    var requestName = 'KTMS'; var objectStoreName = 'Products'; var version; var indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB; var db; function list() { try { var transaction = db.transaction([objectStoreName]); var store = transaction.objectStore(objectStoreName); var idx = store.index('idx_cat'); var crequest = idx.openCursor(); var message = '

    • '; crequest.onsuccess = function (event) { var cursor = event.target.result; if (cursor) { message += ( '
    • ' + key/value" + '' + cursor.key + "/" + cursor.value.ProductName + ''); cursor.continue(); } else { message += '

    ' } document.getElementById('message').innerHTML = message; }; } catch (e) { alert(e); } } window.onload = function () { var request = indexedDB.open(requestName); request.onsuccess = function (event) { db = event.target.result; list(); }; };

    openCursor() success cursor cursor openCursor() HTML5 ()

    23-45

    23

    Indexed Database API

    IDBRequest openCursor ( optional any? range, optional DOMString direction);

    range IDBKeyRange range interface IDBKeyRange { readonly attribute any lower; readonly attribute any upper; readonly attribute boolean lowerOpen; readonly attribute boolean upperOpen; static IDBKeyRange only (any value); static IDBKeyRange lowerBound (any lower, optional boolean open); static IDBKeyRange upperBound (any upper, optional boolean open); static IDBKeyRange bound ( any lower, any upper, optional boolean lowerOpen, optional boolean upperOpen); };

    only lowerBound upperBound value lower open lower false true upper open upper false true lower upper lowerOpen lower false true upperOpen upper

    bound

    direction cursor direction next nextunique prev prevunique Cursor next Cursor prev

    cursor

    23-46

    HTML5 ()

    23.8

    23-16

    index-data-only.html var requestName = 'KTMS'; var objectStoreName = 'Products'; var version; var indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB; window.IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange || window.msIDBKeyRange var db; function list() { try { var transaction = db.transaction([objectStoreName]); var store = transaction.objectStore(objectStoreName); var skey = document.getElementById('key').value; var keyRange = IDBKeyRange.only(skey); var idx = store.index('idx_cat'); var crequest = idx.openCursor(keyRange); var message = '

    • '; crequest.onsuccess = function (event) { var cursor = event.target.result; if (cursor) { message += (

      ()

      HTML5 ()

      23-47

      23

      Indexed Database API

      '

    • ' + key/value" + '' + cursor.key + "/" + cursor.value.ProductName + ''); cursor.continue(); } else { l message += '

    '; document.getElementById('message').innerHTML = message; } }; } catch (e) { alert('error:' + e); } } window.onload = function () { var request = indexedDB.open(requestName); request.onsuccess = function (event) { db = event.target.result; list(); } }; function search() { list(); }

    list() IDBKeyRange. only() IDBKeyRange keyRange index() cursor lowerBound upperBound bound bound()

    23-48

    HTML5 ()

    23.8

    23-17

    23-16 index-data-range.html function list() { try { var transaction = db.transaction([objectStoreName]); var store = transaction.objectStore(objectStoreName); var lower_value = parseInt(document.getElementById('lower').value); var upper_value = parseInt(document.getElementById('upper').value); var keyRange = IDBKeyRange.bound(lower_value, upper_value); var idx = store.index('idx_price'); var crequest = idx.openCursor(keyRange); var message = '

    • '; crequest.onsuccess = function (event) { var cursor = event.target.result; if (cursor) { message += ( '
    • ' +key/value" + '' + cursor.key + "/" + cursor.value.ProductName + ''); cursor.continue(); } else { message += '

    '; document.getElementById('message').innerHTML = message; } }; } catch (e) { alert('error:' + e); } }

    HTML5 ()

    23-49

    23

    Indexed Database API

    bound() IDBKeyRange UnitPrice index() inx_price

    SUMMARY Indexed Databasse API API Indexed Databasse

    23-50

    HTML5 ()