indexDB

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <label>姓名:<input type="text" id="name"></label><br>
    <label>年龄:<input type="text" id="age"></label><br>
    <label>邮箱:<input type="text" id="email"></label><br>
    <button id="add">向数据库中新增数据</button>
    <button id="read">从数据库中读取数据</button>
    <button id="readAll">读取所有数据</button>
    <button id="update">更新数据</button>
    <button id="remove">删除数据</button>
    <button id="useIndex">使用索引</button>
    <script>
        // 参考地址
        // http://www.ruanyifeng.com/blog/2018/07/indexeddb.html
        // 打开数据库
        var request = window.indexedDB.open("imgs");
        request.onerror = function (event) {
            console.log('数据库打开报错');
        };
        request.onsuccess = function (event) {
            db = request.result;
            console.log('数据库打开成功');
            console.log(db);
        };

        // 新建数据库
        //         新建数据库与打开数据库是同一个操作。如果指定的数据库不存在,就会新建。不同之处在于,后续的操作主要在upgradeneeded事件的监听函数里面完成,因为这时版本从无到有,所以会触发这个事件。

        // 通常,新建数据库以后,第一件事是新建对象仓库(即新建表)。
        var db;
        request.onupgradeneeded = function (event) {
            db = event.target.result;
            if (!db.objectStoreNames.contains('section1')) {
                // 创建表格
                var objectStore = db.createObjectStore('section1', {
                    keyPath: 'id',       //相当于表中的主键
                    autoIncrement: true
                });
                // 创建表格索引
                // IDBObject.createIndex()的三个参数分别为索引名称、索引所在的属性、配置对象(说明该属性是否包含重复的值)。
                objectStore.createIndex('name', 'name', {
                    unique: false
                });
                objectStore.createIndex('email', 'email', {
                    unique: false
                });
            }

        }

        // 新增数据
        // 必须启动服务器环境才能添加数据成功
        function add() {
            var request = db.transaction(['section1'], 'readwrite')
                .objectStore('section1')
                .add({
                    name: document.getElementById("name").value,
                    age: document.getElementById("age").value,
                    email: document.getElementById("email").value
                });

            request.onsuccess = function (event) {
                console.log('数据写入成功');
            };

            request.onerror = function (event) {
                console.log('数据写入失败');
            }
        }
        document.getElementById("add").onclick = add;


        //读取数据
        function read() {
            var transaction = db.transaction(['section1']);
            var objectStore = transaction.objectStore('section1');
            var request = objectStore.get(1);

            request.onerror = function (event) {
                console.log('事务失败');
            };

            request.onsuccess = function (event) {
                if (request.result) {
                    console.log('Name: ' + request.result.name);
                    console.log('Age: ' + request.result.age);
                    console.log('Email: ' + request.result.email);
                } else {
                    console.log('未获得数据记录');
                }
            };
        }
        document.getElementById("read").onclick = read;

        //读取所有数据
        function readAll() {
            var objectStore = db.transaction('section1').objectStore('section1');

            objectStore.openCursor().onsuccess = function (event) {
                var cursor = event.target.result;

                if (cursor) {
                    console.log('Id: ' + cursor.key);
                    console.log('Name: ' + cursor.value.name);
                    console.log('Age: ' + cursor.value.age);
                    console.log('Email: ' + cursor.value.email);
                    cursor.continue();
                } else {
                    console.log('没有更多数据了!');
                }
            };
        }
        document.getElementById("readAll").onclick = readAll;

        //更新数据
        function update() {
            var request = db.transaction(['section1'], 'readwrite')
                .objectStore('section1')
                .put({
                    id: 1,
                    name: '李四',
                    age: 35,
                    email: 'lisi@example.com'
                });

            request.onsuccess = function (event) {
                console.log('数据更新成功');
            };

            request.onerror = function (event) {
                console.log('数据更新失败');
            }
        }

        document.getElementById("update").onclick = update;

        //删除数据
        function remove() {
            var request = db.transaction(['section1'], 'readwrite')
                .objectStore('section1')
                .delete(1);

            request.onsuccess = function (event) {
                console.log('数据删除成功');
            };
        }
        document.getElementById("remove").onclick = remove;

        // 使用索引
        // 索引的意义在于,可以让你搜索任意字段,也就是说从任意字段拿到数据记录。如果不建立索引,默认只能搜索主键(即从主键取值)。

        // 假定新建表格的时候,对name字段建立了索引。

        function useIndex(){
            var transaction = db.transaction(['section1'], 'readonly');
            var store = transaction.objectStore('section1');
            var index = store.index('name');
            var request = index.get('ls');
            request.onsuccess = function (e) {
                var result = e.target.result;
                if (result) {
                    // ...
                    console.log(result);
                } else {
                    // ...
                    console.log("没有找到数据")
                }
                }
        }
        

        document.getElementById("useIndex").onclick = useIndex;
    </script>
</body>

</html>

 

posted @ 2018-12-28 16:06  宝2333  阅读(197)  评论(0编辑  收藏  举报