Please note, this is a STATIC archive of website developer.mozilla.org from 03 Nov 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

Revision 669075 of IDBOpenDBRequest

  • Revision slug: Web/API/IDBOpenDBRequest
  • Revision title: IDBOpenDBRequest
  • Revision id: 669075
  • Created:
  • Creator: chrisdavidmills
  • Is current revision? No
  • Comment

Revision Content

{{APIRef()}}

The IDBOpenDBRequest interface of the IndexedDB API provides access to the results of requests to open or delete databases (performed using {{domxref("IDBFactory.open")}} and {{domxref("IDBFactory.deleteDatabase")}}), using specific event handler attributes.

Inherits from: {{domxref("IDBRequest")}}

Methods

No methods.

Properties

Event handlers

{{domxref("IDBOpenDBRequest.onblocked")}}
The event handler for the blocked event. This event is triggered when the upgradeneeded event should be triggered because of a version change but the database is still in use (i.e. not closed) somewhere, even after the versionchange event was sent.
{{domxref("IDBOpenDBRequest.onupgradeneeded")}}
The event handler for the upgradeneeded event, fired when a database of a bigger version number than the existing stored database is loaded.

Example

In the following example you can see the onupgradeneeded handler being used to update the database structure if a database with a higher version number is loaded. For a full working example, see our To-do Notifications app (view example live.)

var db;

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

// these two event handlers act on the database being opened successfully, or not
DBOpenRequest.onerror = function(event) {
  note.innerHTML += '<li>Error loading database.</li>';
};

DBOpenRequest.onsuccess = function(event) {
  note.innerHTML += '<li>Database initialised.</li>';
 
  // store the result of opening the database in the db variable. This is used a lot below
  db = request.result;
 
  // Run the displayData() function to populate the task list with all the to-do list data already in the IDB
  displayData();
};

// 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
//it is only implemented in recent browsers
DBOpenRequest.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 });
};

Specifications

Specification Status Comment
{{SpecName('IndexedDB', '#idl-def-IDBOpenDBRequest', 'IDBOpenDBRequest')}} {{Spec2('IndexedDB')}}  

Browser compatibility

{{ CompatibilityTable() }}

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Basic support

16{{property_prefix("webkit")}}

24

{{CompatGeckoDesktop("11.0")}}{{property_prefix("moz")}}

{{CompatGeckoDesktop("16.0")}}

10 17 {{CompatNo}}
Feature Android Chrome Mobile Firefox Mobile (Gecko) Firefox OS IE Phone Opera Mobile Safari Mobile
Basic support 4.4 Yes{{property_prefix("webkit")}} {{CompatGeckoMobile("6.0")}} 1.0.1 10 17 {{CompatNo}}

See also

  • Using IndexedDB
  • Starting transactions: {{domxref("IDBDatabase")}}
  • Setting transaction modes: {{domxref("IDBTransaction")}}
  • Setting a range of keys: {{domxref("IDBKeyRange")}}
  • Making changes to your data: {{domxref("IDBIndex")}} and {{domxref("IDBObjectStore")}}
  • Creating cursors: {{domxref("IDBCursor")}}
  • Reference example: To-do Notifications (view example live.)

Revision Source

<p>{{APIRef()}}</p>
<div>
 <p>The <code>IDBOpenDBRequest</code> interface of the IndexedDB&nbsp;API provides access to the results of requests to open or delete databases (performed using {{domxref("IDBFactory.open")}} and {{domxref("IDBFactory.deleteDatabase")}}), using specific event handler attributes.</p>
</div>
<p>Inherits from: {{domxref("IDBRequest")}}</p>
<h2 id="Methods">Methods</h2>
<p>No methods.</p>
<h2 id="Properties">Properties</h2>
<h3 id="Event_handlers">Event handlers</h3>
<dl>
 <dt>
  {{domxref("IDBOpenDBRequest.onblocked")}}</dt>
 <dd>
  The event handler for the blocked event. This event is triggered when the <code>upgradeneeded</code> event should be triggered because of a version change but the database is still in use (i.e. not closed) somewhere, even after the <code>versionchange</code> event was sent.</dd>
 <dt>
  {{domxref("IDBOpenDBRequest.onupgradeneeded")}}</dt>
 <dd>
  The event handler for the <code>upgradeneeded</code> event, fired when a database of a bigger version number than the existing stored database is loaded.</dd>
</dl>
<h2 id="Example">Example</h2>
<p>In the following example you can see the onupgradeneeded handler being used to update the database structure if a database with a higher version number is loaded. For a full working example, see our <a class="external" href="https://github.com/mdn/to-do-notifications/tree/gh-pages">To-do Notifications</a> app (<a class="external" href="https://mdn.github.io/to-do-notifications/">view example live</a>.)</p>
<pre class="brush: js; highlight:[15,25,26,28,29,30,31,32,33,34]">
var db;

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

// these two event handlers act on the database being opened successfully, or not
DBOpenRequest.onerror = function(event) {
  note.innerHTML += '&lt;li&gt;Error loading database.&lt;/li&gt;';
};

DBOpenRequest.onsuccess = function(event) {
  note.innerHTML += '&lt;li&gt;Database initialised.&lt;/li&gt;';
 
  // store the result of opening the database in the db variable. This is used a lot below
  db = request.result;
 
  // Run the displayData() function to populate the task list with all the to-do list data already in the IDB
  displayData();
};

// 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
//it is only implemented in recent browsers
DBOpenRequest.onupgradeneeded = function(event) {
  var db = event.target.result;
 
  db.onerror = function(event) {
    note.innerHTML += '&lt;li&gt;Error loading database.&lt;/li&gt;';
  };

  // Create an objectStore for this database   
  var objectStore = db.createObjectStore("toDoList", { keyPath: "taskTitle" });

  // define what data items the objectStore will contain
&nbsp;&nbsp; &nbsp;
&nbsp; objectStore.createIndex("hours", "hours", { unique: false });
&nbsp; objectStore.createIndex("minutes", "minutes", { unique: false });
&nbsp; objectStore.createIndex("day", "day", { unique: false });
&nbsp; objectStore.createIndex("month", "month", { unique: false });
&nbsp; objectStore.createIndex("year", "year", { unique: false });
&nbsp; objectStore.createIndex("notified", "notified", { unique: false });
};</pre>
<h2 id="Specifications">Specifications</h2>
<table class="standard-table">
 <tbody>
  <tr>
   <th scope="col">Specification</th>
   <th scope="col">Status</th>
   <th scope="col">Comment</th>
  </tr>
  <tr>
   <td>{{SpecName('IndexedDB', '#idl-def-IDBOpenDBRequest', 'IDBOpenDBRequest')}}</td>
   <td>{{Spec2('IndexedDB')}}</td>
   <td>&nbsp;</td>
  </tr>
 </tbody>
</table>
<h2 id="Browser_compatibility">Browser compatibility</h2>
<p>{{ CompatibilityTable() }}</p>
<div id="compat-desktop">
 <table class="compat-table">
  <tbody>
   <tr>
    <th>Feature</th>
    <th>Chrome</th>
    <th>Firefox (Gecko)</th>
    <th>Internet Explorer</th>
    <th>Opera</th>
    <th>Safari (WebKit)</th>
   </tr>
   <tr>
    <td>Basic support</td>
    <td>
     <p>16{{property_prefix("webkit")}}</p>
     <p>24</p>
    </td>
    <td>
     <p>{{CompatGeckoDesktop("11.0")}}{{property_prefix("moz")}}</p>
     <p>{{CompatGeckoDesktop("16.0")}}</p>
    </td>
    <td>10</td>
    <td>17</td>
    <td>{{CompatNo}}</td>
   </tr>
  </tbody>
 </table>
</div>
<div id="compat-mobile">
 <table class="compat-table">
  <tbody>
   <tr>
    <th>Feature</th>
    <th>Android</th>
    <th>Chrome Mobile</th>
    <th>Firefox Mobile (Gecko)</th>
    <th>Firefox OS</th>
    <th>IE Phone</th>
    <th>Opera Mobile</th>
    <th>Safari Mobile</th>
   </tr>
   <tr>
    <td>Basic support</td>
    <td>4.4</td>
    <td>Yes{{property_prefix("webkit")}}</td>
    <td>{{CompatGeckoMobile("6.0")}}</td>
    <td>1.0.1</td>
    <td>10</td>
    <td>17</td>
    <td>{{CompatNo}}</td>
   </tr>
  </tbody>
 </table>
</div>
<h2 id="See_also">See also</h2>
<ul>
 <li><a href="/en-US/docs/Web/API/IndexedDB_API/Using_IndexedDB">Using IndexedDB</a></li>
 <li>Starting transactions: {{domxref("IDBDatabase")}}</li>
 <li>Setting transaction modes: {{domxref("IDBTransaction")}}</li>
 <li>Setting a range of keys: {{domxref("IDBKeyRange")}}</li>
 <li>Making changes to your data: {{domxref("IDBIndex")}} and {{domxref("IDBObjectStore")}}</li>
 <li>Creating cursors: {{domxref("IDBCursor")}}</li>
 <li>Reference example: <a class="external" href="https://github.com/mdn/to-do-notifications/tree/gh-pages">To-do Notifications</a> (<a class="external" href="https://mdn.github.io/to-do-notifications/">view example live</a>.)</li>
</ul>
Revert to this revision