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 + '全部記錄');
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM