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 + '全部记录');
}

 

posted @ 2017-11-20 14:10  刘浩2561179983  阅读(4700)  评论(0编辑  收藏  举报