/** * 打開數據庫 */ 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 + '全部記錄'); }