indexeddb 中删除记录需调用 objectstore 的 delete() 方法,在 readwrite 事务中按主键或 idbkeyrange 范围执行;主键类型须匹配定义,否则报 notfounderror 或静默失败。

IndexedDB 中没有直接叫 delete 的方法,真正用来删除记录的是 ObjectStore 的 delete() 方法,它通过主键(key)或 key range 删除单条或多条数据。
确认目标对象仓库和事务模式
删除操作必须在读写事务中进行,不能在只读事务里调用 delete(),否则会报错 InvalidStateError。
- 打开数据库后,用
transaction(storeName, 'readwrite')获取读写事务 - 再通过
transaction.objectStore(storeName)拿到对象仓库实例 - 确保该 store 已存在且你有权限操作(通常建库时已定义好)
按主键删除单条记录
如果知道要删的记录主键(比如 ID 是 123),最简单的方式是传入这个 key:
const request = objectStore.delete(123);
request.onsuccess = () => console.log('删除成功');
request.onerror = () => console.error('删除失败:', request.error);
注意:主键类型需与 store 定义一致(number、string、Date 或 Array),传错类型会导致 NotFoundError 或静默失败。
按范围批量删除多条记录
用 IDBKeyRange 可以删一段连续或符合条件的数据,比如删掉所有 id 在 100–200 之间的记录:
-
IDBKeyRange.lowerBound(100):删除 ≥100 的所有记录 -
IDBKeyRange.upperBound(200):删除 ≤200 的所有记录 -
IDBKeyRange.bound(100, 200, true, true):删除 >100 且
示例:
const range = IDBKeyRange.bound(100, 200); const request = objectStore.delete(range);
检查是否真被删掉了
delete() 成功不代表数据一定存在过——它对不存在的 key 也返回 success。如需确认原记录是否存在,建议先用 get() 查询再删,或监听 onsuccess 后再查一次:
objectStore.get(123).onsuccess = function(e) {
if (e.target.result !== undefined) {
objectStore.delete(123); // 确实存在才删
}
};
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











