IDBObjectStore

This article is in need of a technical review.

« IDBObjectStore

The IDBObjectStore interface of the IndexedDB API represents an object store in a database. Records within an object store are sorted according to their keys. This sorting enables fast insertion, look-up, and ordered retrieval.

Methods

IDBObjectStore.add
Returns an IDBRequest object, and, in a separate thread, creates a structured clone of the value, and stores the cloned value in the object store.
IDBObjectStore.clear
Creates and immediately returns an IDBRequest object, and clears this object store in a separate thread.
IDBObjectStore.delete
returns an IDBRequest object, and, in a separate thread, deletes the current object store.
IDBObjectStore.get
returns an IDBRequest object, and, in a separate thread, returns the object store selected by the specified key.
IDBObjectStore.createIndex
Creates and returns a new IDBIndex object in the connected database.
IDBObjectStore.deleteIndex
Destroys the index with the specified name in the connected database.
IDBObjectStore.index
Opens the named index in this object store.
IDBObjectStore.put
Returns an IDBRequest object, and, in a separate thread, creates a structured clone of the value, and stores the cloned value in the object store.

Properties

IDBObjectStore.indexNames Read only
A list of the names of indexes on objects in this object store.
IDBObjectStore.keyPath Read only
The key path of this object store. If this attribute is null, the application must provide a key for each modification operation.
IDBObjectStore.name Read only
The name of this object store.
IDBObjectStore.transaction Read only
The name of the transaction to which this object store belongs.
IDBObjectStore.autoIncrement Read only
The value of the auto increment flag for this object store.

Example

// Let us open our database
var request = window.indexedDB.open("toDoList", 4);

request.onsuccess = function(event) {
  note.innerHTML += '<li>Database initialised.</li>';
 
  // store the result of opening the database in the db variable.
  db = request.result;
};

// This event handles the event whereby a new version of the database needs to be created
// Either one has not been created before, or a new version number has been submitted via the
// window.indexedDB.open line above
request.onupgradeneeded = function(event) {
  var db = event.target.result;
 
  db.onerror = function(event) {
    note.innerHTML += '<li>Error loading database.</li>';
  };

  // Create an objectStore for this database
 
  var objectStore = db.createObjectStore("toDoList", { keyPath: "taskTitle" });
 
  // define what data items the objectStore will contain
 
  objectStore.createIndex("hours", "hours", { unique: false });
  objectStore.createIndex("minutes", "minutes", { unique: false });
  objectStore.createIndex("day", "day", { unique: false });
  objectStore.createIndex("month", "month", { unique: false });
  objectStore.createIndex("year", "year", { unique: false });

  objectStore.createIndex("notified", "notified", { unique: false });
 
  note.innerHTML += '<li>Object store created.</li>';
};

// Create a new item to add in to the object store
var newItem = [
  { taskTitle: "Walk dog", hours: 19, minutes: 30, day: 24, month: 'December', year: 2013, notified: "no" }
];

// open a read/write db transaction, ready for adding the data
var transaction = db.transaction(["toDoList"], "readwrite");
    
// report on the success of opening the transaction
transaction.oncomplete = function(event) {
  note.innerHTML += '<li>Transaction opened for task addition.</li>';
};

transaction.onerror = function(event) {
  note.innerHTML += '<li>Transaction not opened due to error. Duplicate items not allowed.</li>';
};

// create an object store on the transaction
var objectStore = transaction.objectStore("toDoList");
// add our newItem object to the object store
var request = objectStore.add(newItem[0]);        

request.onsuccess = function(event) {
  note.innerHTML += '<li>New item added to database.</li>';
}

Specifications

Specification Status Comment
Indexed Database API Candidate Recommendation  

Browser compatibility

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Basic support 12 4.0 (2.0) 10 17 Not supported
count() 23 10.0 (10.0) 10 17 Not supported
Feature Android Firefox Mobile (Gecko) Firefox OS IE Phone Opera Mobile Safari Mobile
Basic support 4.4 6.0 (6.0) 1.0.1 10 17 Not supported
count() 4.4 ? 1.0.1 10 17 Not supported

Be careful in Chrome as it still implements the old specification along the new one. Similarly it still has the prefixed webkitIndexedDB property even if the unprefixed indexedDB is present.

See also

To learn more about various topics, see the following

Document Tags and Contributors

Last updated by: nnnn20430,