indexdDB 存储(转载)

原文链接:(29条消息) HTML5本地存储indexDB新建数据库、数据库增删改查操作_#麻辣小龙虾#的博客-CSDN博客_h5本都存储增删改查

完整代码

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" />
    <meta name="apple-mobile-web-app-capable" content="yes" />
    <meta name="author" content="sina_mobile">
    <meta name="format-detection" content="telephone=no" />
    <title>indexDB</title>
    <style>
        .outbox{
            width:300px;
            display:inline-block;
            border:1px solid #ccc;
        }
        .innerbox{
            height:400px;
            color:#333;
            line-height:20px;
            font-size:12px;
            width:300px;
        }
    </style>
</head>
<body>
<div class="outbox">
    <button>IndexDB新增操作</button>
    <div class="innerbox" id="content1"></div>
</div>
<div class="outbox">
    <button>IndexDB修改操作</button>
    <div class="innerbox" id="content2"></div>
</div>
<div class="outbox">
    <button>IndexDB删除操作</button>
    <div class="innerbox" id="content3"></div>
</div>
<div class="outbox">
    <button>IndexDB遍历操作</button>
    <div class="innerbox" id="content4"></div>
</div>
<script>
    var content = null;
    // 本演示使用的数据库名称
    var dbName = 'project';
    // 版本
    var version = 1;
    // 数据库数据结果
    var db;

    // 打开数据库
    var DBOpenRequest = window.indexedDB.open(dbName, version);

    // 如果数据库打开失败
    DBOpenRequest.onerror = function(event) {
        logError('数据库打开失败');
    };

    DBOpenRequest.onsuccess = function(event) {
        // 存储数据结果
        db = DBOpenRequest.result;
        console.log('db',db)

    };

    // 下面事情执行于:数据库首次创建版本,或者window.indexedDB.open传递的新版本(版本数值要比现在的高)
    DBOpenRequest.onupgradeneeded = function(event) {
        db = event.target.result;

        db.onerror = function(event) {
            logError('数据库打开失败');
        };

        // 创建一个数据库存储对象
        var objectStore = db.createObjectStore(dbName, {
            keyPath: 'id',
            autoIncrement: true
        });

        // 定义存储对象的数据项
        objectStore.createIndex('id', 'id', {
            unique: true
        });
        objectStore.createIndex('name', 'name');
        objectStore.createIndex('begin', 'begin');
        objectStore.createIndex('end', 'end');
        objectStore.createIndex('person', 'person');
        objectStore.createIndex('remark', 'remark');
    };

    var method = {
        // 添加数据
        add: function (newItem) {
            var transaction = db.transaction([dbName], "readwrite");
            // 打开已经存储的数据对象
            var objectStore = transaction.objectStore(dbName);
            // 添加到数据对象中
            var objectStoreRequest = objectStore.add(newItem);
            objectStoreRequest.onsuccess = function(event) {
                alert('新增成功!');
            };
        },
        // 更新数据
        update: function (id, data) {
            // 编辑数据
            var transaction = db.transaction([dbName], "readwrite");
            // 打开已经存储的数据对象
            var objectStore = transaction.objectStore(dbName);
            // 获取存储的对应键的存储对象
            var objectStoreRequest = objectStore.get(id);
            // 获取成功后替换当前数据
            objectStoreRequest.onsuccess = function(event) {
                // 当前数据
                var myRecord = objectStoreRequest.result;
                // 遍历替换
                for (var key in data) {
                    if (typeof myRecord[key] != 'undefined') {
                        myRecord[key] = data[key];
                    }
                }
                // 更新数据库存储数据
                objectStore.put(myRecord);
            };
        },
        // 删除数据
        del: function (id) {
            // 打开已经存储的数据对象
            var objectStore = db.transaction([dbName], "readwrite").objectStore(dbName);
            // 直接删除
            var objectStoreRequest = objectStore.delete(id);
            // 删除成功后
        },
        // 通过主键key单个记录数据,主键是前面开始设置的相应key值
        get: function (key) {
            var transaction = db.transaction([dbName], "readwrite");
            var store = transaction.objectStore(dbName);
            var request = store.get(key);
            request.onerror = function(){
                console.error('getDataByKey error');
            };
            request.onsuccess = function(e){
                var result = e.target.result;
                console.log('查找数据成功')
                console.log(result);
            };
        },
        // 遍历数据表
        cursor: function () {
            var transaction = db.transaction([dbName], "readwrite");
            var store = transaction.objectStore(dbName);
            var request = store.openCursor();//打开游标
            var arr = [];
            request.onsuccess = function(e) {
                var cursor = e.target.result;
                if (cursor) {
                    console.log(cursor);
                    arr.push(cursor.value);
                    cursor.continue();
                }
                content = JSON.stringify(arr);
            };
        }
    };
    let count = 0;
    // 新增
    document.querySelectorAll('button')[0].onclick = function () {
        // method.cursor();
        method.add({name: 'zyc' + count++, begin: '2012-12-22', end: '2122-32-44', person: 'dada', remark: 'dada'});
        method.cursor();    // 遍历所有数据库表project的记录,并输出到div里面
        document.querySelector("#content1").innerHTML = content;
    }
    // 修改
    document.querySelectorAll('button')[1].onclick = function () {
        method.update(3, {name: '我是更改的值id=3', begin: '2012-12-22', end: '2122-32-44', person: 'dada', remark: 'dada'});
        method.cursor();    // 遍历所有数据库表project的记录,并输出到div里面
        document.querySelector("#content2").innerHTML = content;
    }
    // 删除
    document.querySelectorAll('button')[2].onclick = function () {
        method.del(2); // 删除主键key id = 2的值
        method.cursor();    // 遍历所有数据库表project的记录,并输出到div里面
        document.querySelector("#content3").innerHTML = content;
    }
    // 遍历
    document.querySelectorAll('button')[3].onclick = function () {
        method.cursor();    // 遍历所有数据库表project的记录,并输出到div里面
        document.querySelector("#content4").innerHTML = content;
    }
</script>
</body>
</html>

 

posted @ 2023-02-20 15:00  从入门到入土  阅读(66)  评论(0编辑  收藏  举报