IDBObjectStore - 表示数据库里的对象库

IDBObjectStoreIndexedDB API 的接口,表示数据库里的对象库。对象库中的记录根据其键进行排序。这种排序可以实现快速插入,查找和有序检索。

注意: 此特性在 Web Worker 中可用。

属性

IDBObjectStore.indexNames 只读

此对象库中对象的索引的名称列表。

IDBObjectStore.keyPath 只读

此对象库的key path。如果此属性为 null,则应用程序必须为每个修改操作提供密钥。

IDBObjectStore.name

此对象库的名称。

IDBObjectStore.transaction 只读

此对象库所属的 IDBTransaction 对象。

IDBObjectStore.autoIncrement 只读

此对象库的自动增量标志的值。

方法

IDBObjectStore.add()

返回一个 IDBRequest 对象,并在一个单独的线程中创建 value结构化克隆,并将克隆的值存储在对象库中。这是为了向对象库添加新记录。

IDBObjectStore.clear()

创建并立即返回一个 IDBRequest 对象,并在单独的线程中清除此对象库。这用于删除对象库中的所有当前记录。

IDBObjectStore.count()

返回一个 IDBRequest 对象,并在单独的线程中返回与提供的键或 IDBKeyRange 匹配的记录总数。如果未提供参数,则返回库中的记录总数。

IDBObjectStore.createIndex()

在版本升级期间创建新索引,在连接的数据库中返回新的 IDBIndex 对象。

IDBObjectStore.delete()

返回一个 IDBRequest 对象,并在单独的线程中删除由指定键选择的库对象。这用于从对象库中删除单个记录。

IDBObjectStore.deleteIndex()

销毁在版本升级期间使用的已连接数据库中的指定索引。

IDBObjectStore.get()

返回一个 IDBRequest 对象,并在单独的线程中返回由指定键选择的对象库。这用于从对象库中检索特定记录。

IDBObjectStore.getKey()

返回一个 IDBRequest 对象,并在单独的线程中检索并返回与指定参数匹配的对象中的对象的记录键。

IDBObjectStore.getAll()

返回一个 IDBRequest 对象,如果没有给出参数,则检索与指定参数匹配的对象库中的所有对象或库中的所有对象。

IDBObjectStore.getAllKeys()

返回一个 IDBRequest 对象,检索对象库中与指定参数匹配的所有对象的记录键,如果没有给出参数,则检索库中的所有对象。

IDBObjectStore.index()

从此对象库打开索引,之后可以使用它来返回使用游标按该索引排序的记录序列。

IDBObjectStore.openCursor()

返回一个 IDBRequest 对象,并在单独的线程中返回一个新的 IDBCursorWithValue 对象。用于通过主键和游标迭代对象存储。

IDBObjectStore.openKeyCursor()

返回一个 IDBRequest 对象,并在一个单独的线程中返回一个新的IDBCursor。用于使用键遍历对象库。

IDBObjectStore.put()

返回一个 IDBRequest 对象,并在一个单独的线程中创建 value结构化克隆,并将克隆的值存储在对象库中。这是为了在事务模式为 readwrite 时更新对象存储中的现有记录。

实例

此实例显示了对象存储的各种不同用法,从使用 onupgradeneeded 函数更新数据结构 IDBObjectStore.createIndex 到使用 IDBObjectStore.add 向对象存储库添加新项目。有关完整的工作实例,请参阅我们的待办事项通知应用程序(查看在线实例。)

// 让我们打开我们的数据库
var DBOpenRequest = window.indexedDB.open("toDoList", 4);

DBOpenRequest.onsuccess = function(event) {
  note.innerHTML += '<li>数据库已初始化。</li>';

  // 存储在 db 变量中打开数据库的结果。这在后续会多处使用。
  db = DBOpenRequest.result;
};

// 当数据库需要创建新版本:以前未创建过该数据库,
// 或者是通过上面的 window.indexedDB.open 提交了新版本号时,
// 触发该事件处理程序
DBOpenRequest.onupgradeneeded = function(event) {
  var db = event.target.result;

  db.onerror = function(event) {
    note.innerHTML += '<li>加载数据库出错。</li>';
  };

  // 为此数据库创建 objectStore
  var objectStore = db.createObjectStore("toDoList", { keyPath: "taskTitle" });

  // 定义 objectStore 将包含哪些数据项
  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>对象库已创建。</li>';
};

// 创建一个新的项目加入到该对象库中
var newItem = [
  { taskTitle: "遛狗", hours: 19, minutes: 30, day: 24, month: 12, year: 2013, notified: "no" }
];

// 打开一个读/写的数据库事务,准备添加数据
var transaction = db.transaction(["toDoList"], "readwrite");

// 当一切就绪,在事务完成时,提示成功
transaction.oncomplete = function(event) {
  note.innerHTML += '<li>事务完成。</li>';
};

transaction.onerror = function(event) {
  note.innerHTML += '<li>因为错误事务未打开。不允许重复的项目。</li>';
};

// 在事务中创建一个对象库
var objectStore = transaction.objectStore("toDoList");
// 发起一个请求,添加我们的新项目对象到对象库中
var objectStoreRequest = objectStore.add(newItem[0]);        

objectStoreRequest.onsuccess = function(event) {
  note.innerHTML += '<li>请求成功。</li>';
}

规范

规范 状态 备注
Indexed Database API
IDBObjectStore 的定义
推荐 -
Indexed Database API 2.0
IDBObjectStore 的定义
编者的草案 -

桌面浏览器兼容性

特性ChromeEdgeFirefoxInternet ExplorerOperaSafari
基础支持

24

23 — 57 webkit

支持

16

10 — 16 moz

101157
在 worker 中可用 支持 支持37 未知 支持 未知
autoIncrement

24

23 — 57 webkit

支持

16

10 — 16 moz

101157
indexNames

24

23 — 57 webkit

12

16

10 — 16 moz

101157
keyPath

24

23 — 57 webkit

12

16

10 — 16 moz

101157
name

24

23 — 57 webkit

12

16

10 — 16 moz

101157
transaction

24

23 — 57 webkit

12

16

10 — 16 moz

101157
add

24

23 — 57 webkit

12

16

10 — 16 moz

101157
clear

24

23 — 57 webkit

12

16

10 — 16 moz

101157
count

24

23 — 57 webkit

12

16

10 — 16 moz

101157
createIndex

24

23 — 57 webkit

12

16

10 — 16 moz

101157
delete

24

23 — 57 webkit

12

16

10 — 16 moz

101157
deleteIndex

24

23 — 57 webkit

12

16

10 — 16 moz

101157
get

24

23 — 57 webkit

12

16

10 — 16 moz

101157
getAll48 未知44 未知3510.1
getAllKeys48 未知44 未知3510.1
getKey48 未知51 未知4510.1
index

24

23 — 57 webkit

12

16

10 — 16 moz

101157
openCursor

24

23 — 57 webkit

12

16

10 — 16 moz

101157
openKeyCursor

24

23 — 57 webkit

支持44101157
put

24

23 — 57 webkit

12

16

10 — 16 moz

101157

移动浏览器兼容性

特性AndroidChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
基础支持

24

23 — 57 webkit

24

23 — 57 webkit

支持22 未知228
在 worker 中可用 支持 支持 支持37 未知 支持 未知
autoIncrement

24

23 — 57 webkit

24

23 — 57 webkit

支持22 未知228
indexNames

24

23 — 57 webkit

24

23 — 57 webkit

支持22 未知228
keyPath

24

23 — 57 webkit

24

23 — 57 webkit

支持22 未知228
name

24

23 — 57 webkit

24

23 — 57 webkit

支持22 未知228
transaction

24

23 — 57 webkit

24

23 — 57 webkit

支持22 未知228
add

24

23 — 57 webkit

24

23 — 57 webkit

支持22 未知228
clear

24

23 — 57 webkit

24

23 — 57 webkit

支持22 未知228
count

24

23 — 57 webkit

24

23 — 57 webkit

支持22 未知228
createIndex

24

23 — 57 webkit

24

23 — 57 webkit

支持22 未知228
delete

24

23 — 57 webkit

24

23 — 57 webkit

支持22 未知228
deleteIndex

24

23 — 57 webkit

24

23 — 57 webkit

支持22 未知228
get

24

23 — 57 webkit

24

23 — 57 webkit

支持22 未知228
getAll4848 未知48 未知3510.1
getAllKeys4848 未知48 未知3510.1
getKey4848 未知58 未知4510.1
index

24

23 — 57 webkit

24

23 — 57 webkit

支持22 未知228
openCursor

24

23 — 57 webkit

24

23 — 57 webkit

支持22 未知228
openKeyCursor

24

23 — 57 webkit

24

23 — 57 webkit

支持22 未知228
put

24

23 — 57 webkit

24

23 — 57 webkit

支持22 未知228

1. 部分的

相关链接