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>
  • 相关阅读:
    n9多媒体不显示图片处理方法
    STM32全球唯一ID读取方法
    VS2008+QT+CYAPI开发USB程序问题
    QT对话框中show和exec的区别
    华硕T20信号差的解决办法
    使用JTAG方式配置EPCS芯片时显示容量不够的解决方法
    QT中使用中文
    MODBUS CRC16
    递归的四条基本法则
    Java代码混淆和加密Jocky
  • 原文地址:https://www.cnblogs.com/bao2333/p/10191169.html
Copyright © 2011-2022 走看看