zoukankan      html  css  js  c++  java
  • indexedDB 增删改查

    /**
     * 打开数据库
     */
    export function openDB() {
    
        return new Promise((resolve, reject) => {
            let indexedDB = window.indexedDB || window.webkitindexedDB;
            let request = indexedDB.open(conf.name);
    
            request.onerror = function (e) {
                console.error(e.currentTarget.error.message);
                reject(false);
            };
            request.onsuccess = function (e) {
                window.INDEXEDDB_DB_RET = e.target.result;
                console.log('成功建立并打开数据库:' + conf.name + ' version' + conf.version);
                resolve(true);
            };
            request.onupgradeneeded = function (e) {
                let db = e.target.result;
                let transaction = e.target.transaction;
    
                for (let key in conf.ojstore) {
                    if (!db.objectStoreNames.contains(key)) {
                        //没有该对象空间时创建该对象空间
                        db.createObjectStore(key, conf.ojstore[key]);
                        console.log('成功建立对象存储空间:' + key);
                    }
                }
            }
            window.INDEXEDDB_DB = indexedDB;
        });
    
    }
    
    /**
     * 删除数据库
     */
    export function deleteDB(dbname) {
        let self = this;
        INDEXEDDB_DB.deleteDatabase(dbname);
        console.log(dbname + '数据库已删除')
    }
    
    //关闭数据库
    export function closeDB() {
        INDEXEDDB_DB_RET.close();
        console.log('数据库已关闭')
    }
    
    //添加数据,重复添加会报错
    export function addData(storename, data, callback) {
        let store = INDEXEDDB_DB_RET.transaction(storename, 'readwrite').objectStore(storename);
        for (let i = 0; i < data.length; i++) {
            let request = store.add(data[i]);
            request.onerror = function () {
                console.error('add添加数据库中已有该数据')
            };
            request.onsuccess = function () {
                console.log('add添加数据已存入数据库')
                callback();
            };
        }
    }
    
    // 添加数据,重复添加会更新原有数据
    export function putData(storename, data) {
        console.log(data)
        let store = INDEXEDDB_DB_RET.transaction(storename, 'readwrite').objectStore(storename);
        for (let i = 0; i < data.length; i++) {
            let request = store.put(data[i]);
            request.onerror = function () {
                console.error('put添加数据库中已有该数据')
            };
            request.onsuccess = function () {
                console.log('put添加数据已存入数据库')
            };
        }
    }
    
    //根据存储空间的键找到对应数据
    export function getDataByKey(storename, key, callback) {
        let store = INDEXEDDB_DB_RET.transaction(storename, 'readwrite').objectStore(storename);
        let request = store.get(key);
        request.onerror = function () {
            console.error('getDataByKey error');
        };
        request.onsuccess = function (e) {
            let result = e.target.result;
            console.log('查找数据成功')
            console.log(result);
            $(document).off('event_getDataByKey').on('event_getDataByKey', result);
            if (callback) {
                callback(result);
            }
        };
    }
    
    // 获取全部数据 ,根据 storename
    export function getAllData(storename, callback) {
        let store = INDEXEDDB_DB_RET.transaction(storename, 'readwrite').objectStore(storename);
        let request = store.openCursor();
        let data = [];
        request.onerror = function () {
            console.error('getDataByKey error');
        };
        request.onsuccess = function (e) {
            let result = e.target.result;
            if (result && result !== null) {
                data.push(result.value);
                result.continue();
            } else {
                if (callback) {
                    console.log('全部查找数据成功')
                    callback(data);
                }
            }
        };
    }
    
    //删除某一条记录
    export function deleteData(storename, key) {
        let store = store = INDEXEDDB_DB_RET.transaction(storename, 'readwrite').objectStore(storename);
        store.delete(key)
        console.log('已删除存储空间' + storename + '中' + key + '记录');
    }
    
    //删除存储空间全部记录
    export function clearData(storename) {
    
        let store = INDEXEDDB_DB_RET.transaction(storename, 'readwrite').objectStore(storename);
        store.clear();
        console.log('已删除存储空间' + storename + '全部记录');
    }
  • 相关阅读:
    java之 Timer 类的使用以及深入理解
    关于百度Editor富文本编辑器 自定义上传位置
    BufferedInputStream/BufferedOutputStream
    ByteArrayInputStream/ByteArrayOutputStream 学习
    Android之ViewPager 第二课
    Android之ViewPager 第一课
    内存四区模型
    变量的本质
    数据类型的本质
    File、Blob、ArrayBuffer等文件类的对象有什么区别和联系
  • 原文地址:https://www.cnblogs.com/liuhao-web/p/7866014.html
Copyright © 2011-2022 走看看