浏览器 IndexedDB 简明教程 ( 十二 ) - 删除数据

yufei       5 年, 8 月 前       7445

好了,对于 IndexedDB 中的增改查数据我们都已经学过了,接下来我们将学习如何从一个存储对象中删除数据

回忆下 浏览器 IndexedDB 简明教程 ( 九 ) - 添加数据 章节,我们是不是看到了一个 IDBObjectStore.delete(keyorKeyRange) 方法 ?

回一下 浏览器 IndexedDB 简明教程 ( 十一 ) - 读取所有数据 章节,我们是不是看到了一个 cursor.delete() 方法

这两种方式都可以用来删除数据,我们接下来的内容将分别介绍它们

IDBObjectStore.delete(keyorKeyRange)

如果要从一个存储对象中删除数据,可以使用 IDBObjectStore.delete() ,该方法接受一个唯一的参数 keyorKeyRange,也就是要删除的数据的主键值

原型如下

IDBObjectStore.delete(keyorKeyRange)

该方法返回一个 IDBRequest 对象,并且在一个单独的线程删除指定的记录

范例

下面的代码,删除主键为 10000 的数据

var db;

//先删除
window.indexedDB.deleteDatabase('demo')

const req = window.indexedDB.open('demo');

req.onerror = function (event) {
    console.log('打开数据库失败');
};

req.onsuccess = function (event) {
    console.log('打开数据库成功');
    db = event.target.result;

    var ts = db.transaction( ['city'] ,'readwrite' )
    var city_os = ts.objectStore('city')

    city_os.add({city_id:100000,'city_name':'北京'});
    city_os.add({city_id:300000,'city_name':'天津市'});

    console.log('往 city 里添加了一条数据');

    // 添加 short 字段
    db.transaction( ['city'] ,'readwrite' ).objectStore('city').delete(100000);

    // 获取主键为 100000 的城市
    var request = db.transaction( ['city']).objectStore('city').get(100000);

    // 注册获取数据失败回调
    request.onerror = function(){
        console.log('Transaction failed');
    };

    // 获取数据成功
    request.onsuccess = function( event) {
        if (request.result) {
            console.log('主键 100000 的城市的简写为:' + request.result.short);
        } else {
        console.log('No data record');
        }
    };

};

req.onupgradeneeded = function (event) {
    console.log('升级成功');
    db = event.target.result;
    db.createObjectStore('city',{keyPath:'city_id'});
}

可以看到,当删除了数据之后,再获取时数据就不存在了

cursor.delete()

同样的,我们可以在遍历数据时,判断当前 「 游标 」的 key 属性是否为某个值,如果是的话,则使用 cursor.delete() 方法删除

cursor.delete() 没有任何参数,返回一个 IDBRequest 对象,在一个独立线程内删除游标所在位置处的记录(不移动游标),随后将游标设置为 null

范例

下面的代码,删除主键为 10000 的数据

var db;

//先删除
window.indexedDB.deleteDatabase('demo')

var req = window.indexedDB.open('demo');

req.onerror = function (event) {
    console.log('打开数据库失败');
};

req.onsuccess = function (event) {
    console.log('打开数据库成功');
    db = event.target.result;
    var ts = db.transaction( ['city'] ,'readwrite' );
    var city_os = ts.objectStore('city')

    city_os.add({city_id:100000,'city_name':'北京'});
    city_os.add({city_id:300000,'city_name':'天津'});
    console.log('往 city 里添加了一条数据');

    var ts2 = db.transaction( ['city'] ,'readwrite' );
    var city_os2 = ts2.objectStore('city');
    // 在 city 存储对象上创建一个游标
    var req3 = city_os2.openCursor();
    req3.onsuccess = function (event) {
        var cursor = event.target.result;
        if (cursor) {
            console.log('city_id: ' + cursor.key);
            console.log('city_name: ' + cursor.value.city_name);

            if ( cursor.key == 100000 ) {
                cursor.delete()
            }

            cursor.continue();
        } else {
        console.log('No more data');
        }
    };

    // 获取主键为 100000 的城市
    var request = db.transaction( ['city']).objectStore('city').get(100000);

    // 注册获取数据失败回调
    request.onerror = function(){
        console.log('Transaction failed');
    };

    // 获取数据成功
    request.onsuccess = function( event) {
        if (request.result) {
            console.log('主键 100000 的城市的简写为:' + request.result.short);
        } else {
        console.log('No data record');
        }
    };

};

req.onupgradeneeded = function (event) {
    console.log('升级成功');
    db = event.target.result;
    db.createObjectStore('city',{keyPath:'city_id'});
}

输出结果如下

升级成功
打开数据库成功
往 city 里添加了一条数据
city_id: 100000
city_name: 北京
city_id: 300000
city_name: 天津
No more data
No data record
目前尚无回复
简单教程 = 简单教程,简单编程
简单教程 是一个关于技术和学习的地方
现在注册
已注册用户请 登入
关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.