美文网首页
浏览器 IndexDB 的使用

浏览器 IndexDB 的使用

作者: 田文健 | 来源:发表于2020-07-10 19:32 被阅读0次

浏览器也支持数据库,目前有IndexDB 和 WebSql(仅Chrome支持)可以选择,相比localStrorage ,IndexDB 可以存的数据更多,而且支持索引,能存对象。

综合考虑我在electron 中选择 IndexDB 做为配置存储方案。



let DB;
let dbName = "upper_ebike";
let version = "1";
let OBJECT_STORE_CONFIG = "_OBJECT_STORE_CONFIG"

function createDb() {
    let request = window.indexedDB.open(dbName, version);

    request.onerror = function (event) { console.error(event) }
    request.onsuccess = (event) => {
        DB = request.result//可以拿到数据库对象
    }
    //如果指定的版本号,大于数据库的实际版本号,就会发生数据库升级事件upgradeneeded
    request.onupgradeneeded = function (event) {
        DB = event.target.result;
        //判断是否存在
        if (!DB.objectStoreNames.contains(OBJECT_STORE_CONFIG)) {
            let objectStore = DB.createObjectStore(OBJECT_STORE_CONFIG, { keyPath: 'name' });
        }

    }
}

async function add(objectStoreName, data) {
    return new Promise((resolve, reject) => {
        var request = DB.transaction([objectStoreName], 'readwrite')
            .objectStore(objectStoreName)
            .add(data);

        request.onsuccess = function (event) {
            console.log('数据写入成功');
            resolve();
        };

        request.onerror = function (event) {
            console.log('数据写入失败');
            reject(event);
        }
    })
}

async function getOne(objectStoreName, key) {
    return new Promise((resolve, reject) => {
        let objectStore = DB.transaction([objectStoreName], 'readwrite')
            .objectStore(objectStoreName)

        let request = objectStore.get(key)

        request.onsuccess = function (event) {
            // console.log(request.result)
            resolve(request.result);
        };

        request.onerror = function (event) {
            reject(event);
        }
    })
}

async function getAll(objectStoreName) {
    return new Promise((resolve, reject) => {
        let objectStore = DB.transaction([objectStoreName], 'readwrite')
            .objectStore(objectStoreName);

        let request = objectStore.getAll();

        request.onsuccess = () => {
            resolve(request.result)
        }

        request.onerror = (err) => {
            reject(err)
        }
    })
}

/**
 * 可以更新的保存
 */
async function put(objectStoreName, data) {
    return new Promise((resolve, reject) => {
        let objectStore = DB.transaction([objectStoreName], 'readwrite')
            .objectStore(objectStoreName);

        let request = objectStore.put(data);

        request.onsuccess = function (event) {
            console.log('数据写入成功');
            resolve();
        };

        request.onerror = function (event) {
            console.log('数据写入失败');
            reject(event);
        }
    })
}

createDb();

export { add, getOne, getAll, put, OBJECT_STORE_CONFIG }

相关文章

  • 浏览器 IndexDB 的使用

    浏览器也支持数据库,目前有IndexDB 和 WebSql(仅Chrome支持)可以选择,相比localStro...

  • 《客户端存储技术》总结

    该文章目录 使用cookie 使用Web存储 使用indexDB 使用Web SQL 使用库简化 示例程序 说明:...

  • 2021-11-09

    IndexDB

  • 浏览器数据库IndexDB

    1. 前言 最近刚入职在看新项目的代码,学习了很多新的代码封装思路和模块化的思想。而且也了解到了IndexedDB...

  • webDB简介与使用

    简介及应用场景 浏览器的大数据量存储方式,相当于数据库,webSql为关系型DB,indexDB为非关系型DB。 ...

  • IndexedDB的二次封装

    前言 浏览器数据库存储indexDB(非关系型数据库),考虑到同步的场景,针对其固有api进行二次封装以满足需求。...

  • indexDB

    1.特点 键值对存储:每条记录都有对应的主键,主键是独一无二的,不能重复 异步:在操作indexDB的时候不会锁死...

  • indexDB

    参考:IndexedDB 教程

  • indexDB

    Cookie cookie可以做前端存储方案,但是有很多局限性。 存储空间有限4k, 存储有效时间有限制 存在co...

  • IndexDB

    由于网上很难找到完整的demo,自己写了一个以后,放在这里,留着以后学习使用: var databaseName ...

网友评论

      本文标题:浏览器 IndexDB 的使用

      本文链接:https://www.haomeiwen.com/subject/bsxvcktx.html