/*jshint esversion: 6 */
/*===========================================================================+
| 创建IDB |
+===========================================================================*/
/**
* @Author Muc
* @DateTime 2018-11-19
* @Warning [异步]
* @param {[type]} dbArg [db_name]
* @param {[type]} storeArg [db_tab]
* @param {[type]} sIDArg [db_tab_id]
* @param {[type]} oDataArg [db_tab_id_data]
*/
function fnSetData2IDB(dbArg, storeArg, sIDArg, oDataArg) {
let db,
DBReq;
DBReq = indexedDB.open(dbArg); // 可选参数,version,def=1,代表db的版本(类似git仓库的版本);
/* 初次创建DB或者版本更新时调用 */
DBReq.onupgradeneeded = function(event) {
db = event.target.result;
// if store not exist, then create
if (!db.objectStoreNames.contains(storeArg)) {
let objectStore = db.createObjectStore(storeArg, { keyPath: "id" }); // 设置主键为id
// objectStore.createIndex("keyName", "keyName", { unique: false }); // 建立可重复的索引
}
};
/* 数据库打开成功后 rewrite数据 */
DBReq.onsuccess = (e) => {
db = e.target.result;
let transaction = db.transaction([storeArg], "readwrite"); // second arg def == read
let objStore = transaction.objectStore(storeArg); // 读取对应的仓库(表)数据,此例为storeArg
let putReq = objStore.put({ id: sIDArg, data: oDataArg }); // 覆盖对应id的data内容
putReq.onsuccess = (e) => {};
};
/* 数据库打开失败 */
DBReq.onerror = (e) => {
alert("检测到IndexedDB被禁用,影响:无法保存上次成功解析的数据");
};
}
/*===========================================================================+
| 读取IDB |
+===========================================================================*/
/**
* @Author Muc
* @DateTime 2018-11-08
* @Warning [因为异步,所以通过callback获取结果]
* @param {[type]} dbArg [db_name]
* @param {[type]} storeArg [db_tab]
* @param {[type]} sIDArg [db_tab_id]
* @param {[type]} oDataArg [db_tab_id_data]
*/
function fnGetDataFrIDB(dbArg, storeArg, sIDArg, fnCallBack) {
let db,
DBReq,
data;
DBReq = indexedDB.open(dbArg); // second opt_arg : vers def == 1
/* 初次创建DB或者版本更新时调用 */
DBReq.onupgradeneeded = (e) => {
// 可参考创建
};
/* 数据库打开成功后 rewrite数据 */
DBReq.onsuccess = (e) => {
db = e.target.result; // 读取的db对象结果
let transaction = db.transaction([storeArg], "readwrite"); // 可用数组的方式传入多个表
let objStore = transaction.objectStore(storeArg); // 读取对应的仓库(表)数据,此例为storeArg
let getReq = objStore.get(sIDArg); // 通过表的id创建数据请求
getReq.onsuccess = function(e) {
if (e.target.result) {
data = e.target.result.data;
fnCallBack(data);
} else
console.log("没有数据你读个鸡脖?");
};
};
}