zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    HDOJ 1207 汉诺塔II
    [转]写代码的小女孩
    POJ Subway tree systems
    HDOJ 3555 Bomb (数位DP)
    POJ 1636 Prison rearrangement (DP)
    POJ 1015 Jury Compromise (DP)
    UVA 10003
    UVA 103 Stacking Boxes
    HDOJ 3530 Subsequence
    第三百六十二、三天 how can I 坚持
  • 原文地址:https://www.cnblogs.com/bao2333/p/10191169.html
Copyright © 2011-2022 走看看