IDBObjectStore - 表示数据库里的对象库
IDBObjectStore
是 IndexedDB API 的接口,表示数据库里的对象库。对象库中的记录根据其键进行排序。这种排序可以实现快速插入,查找和有序检索。
属性
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 的定义 |
编者的草案 | - |
桌面浏览器兼容性
特性 | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
基础支持 | 24 23 — 57 webkit | 支持 | 16 10 — 16 moz | 101 | 15 | 7 |
在 worker 中可用 | 支持 | 支持 | 37 | 未知 | 支持 | 未知 |
autoIncrement | 24 23 — 57 webkit | 支持 | 16 10 — 16 moz | 101 | 15 | 7 |
indexNames | 24 23 — 57 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
keyPath | 24 23 — 57 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
name | 24 23 — 57 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
transaction | 24 23 — 57 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
add | 24 23 — 57 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
clear | 24 23 — 57 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
count | 24 23 — 57 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
createIndex | 24 23 — 57 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
delete | 24 23 — 57 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
deleteIndex | 24 23 — 57 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
get | 24 23 — 57 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
getAll | 48 | 未知 | 44 | 未知 | 35 | 10.1 |
getAllKeys | 48 | 未知 | 44 | 未知 | 35 | 10.1 |
getKey | 48 | 未知 | 51 | 未知 | 45 | 10.1 |
index | 24 23 — 57 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
openCursor | 24 23 — 57 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
openKeyCursor | 24 23 — 57 webkit | 支持 | 44 | 101 | 15 | 7 |
put | 24 23 — 57 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
移动浏览器兼容性
特性 | Android | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
---|---|---|---|---|---|---|---|
基础支持 | 24 23 — 57 webkit | 24 23 — 57 webkit | 支持 | 22 | 未知 | 22 | 8 |
在 worker 中可用 | 支持 | 支持 | 支持 | 37 | 未知 | 支持 | 未知 |
autoIncrement | 24 23 — 57 webkit | 24 23 — 57 webkit | 支持 | 22 | 未知 | 22 | 8 |
indexNames | 24 23 — 57 webkit | 24 23 — 57 webkit | 支持 | 22 | 未知 | 22 | 8 |
keyPath | 24 23 — 57 webkit | 24 23 — 57 webkit | 支持 | 22 | 未知 | 22 | 8 |
name | 24 23 — 57 webkit | 24 23 — 57 webkit | 支持 | 22 | 未知 | 22 | 8 |
transaction | 24 23 — 57 webkit | 24 23 — 57 webkit | 支持 | 22 | 未知 | 22 | 8 |
add | 24 23 — 57 webkit | 24 23 — 57 webkit | 支持 | 22 | 未知 | 22 | 8 |
clear | 24 23 — 57 webkit | 24 23 — 57 webkit | 支持 | 22 | 未知 | 22 | 8 |
count | 24 23 — 57 webkit | 24 23 — 57 webkit | 支持 | 22 | 未知 | 22 | 8 |
createIndex | 24 23 — 57 webkit | 24 23 — 57 webkit | 支持 | 22 | 未知 | 22 | 8 |
delete | 24 23 — 57 webkit | 24 23 — 57 webkit | 支持 | 22 | 未知 | 22 | 8 |
deleteIndex | 24 23 — 57 webkit | 24 23 — 57 webkit | 支持 | 22 | 未知 | 22 | 8 |
get | 24 23 — 57 webkit | 24 23 — 57 webkit | 支持 | 22 | 未知 | 22 | 8 |
getAll | 48 | 48 | 未知 | 48 | 未知 | 35 | 10.1 |
getAllKeys | 48 | 48 | 未知 | 48 | 未知 | 35 | 10.1 |
getKey | 48 | 48 | 未知 | 58 | 未知 | 45 | 10.1 |
index | 24 23 — 57 webkit | 24 23 — 57 webkit | 支持 | 22 | 未知 | 22 | 8 |
openCursor | 24 23 — 57 webkit | 24 23 — 57 webkit | 支持 | 22 | 未知 | 22 | 8 |
openKeyCursor | 24 23 — 57 webkit | 24 23 — 57 webkit | 支持 | 22 | 未知 | 22 | 8 |
put | 24 23 — 57 webkit | 24 23 — 57 webkit | 支持 | 22 | 未知 | 22 | 8 |
1. 部分的
相关链接
- 使用 IndexedDB
- 启动事务:
IDBDatabase
- 使用事务:
IDBTransaction
- 设置一系列键:
IDBKeyRange
- 检索并更改数据:
IDBObjectStore
- 使用游标:
IDBCursor
- 参考实例:To-do 通知 (在线查看实例。)