js IndexedDB的入门实例

/*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("没有数据你读个鸡脖?");
        };
    };

}

 

你可能感兴趣的:(js)