• HTML5存储之indexedDB


    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>localStorage</title>
    </head>
    <body>
    
        <script>
            localStorage.a=1;
            console.log(localStorage);
        </script>
    </body>
    </html>

    打开控制台--application--localStorage

    可以直接手动修改存储的数据

    HTML5数据库--indexedDB

    indexedDB.open() 创建数据库

     

     注意查看数据库时需要在indexedDB上右键刷新

    查看indexedDB总共有哪些方法:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>localStorage</title>
    </head>
    <body>
    
        <script>
            var request=indexedDB.open("textDB",1);
            console.log(request);
        </script>
    </body>
    </html>

    onsuccess

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>localStorage</title>
    </head>
    <body>
    
        <script>
            var request=indexedDB.open("textDB",4);
            //数据库不存在则创建,存在则打开
            //第二个参数是版本号,只能比上一次增加,不能减少,否则会报错
    
            request.onsuccess=function(){
                console.log("创建数据库成功~");
            }
            request.onerror=function(){
                console.log("读取数据库失败~");
            }
        </script>
    </body>
    </html>

    onerrror

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>localStorage</title>
    </head>
    <body>
    
        <script>
            var request=indexedDB.open("textDB",2);
            //数据库不存在则创建,存在则打开
            //第二个参数是版本号,只能比上一次增加,不能减少,否则会报错
    
            request.onsuccess=function(){
                console.log("创建数据库成功~");
            }
            request.onerror=function(){
                console.log("读取数据库失败~");
            }
        </script>
    </body>
    </html>

    onupgradeneeded 版本升级

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>localStorage</title>
    </head>
    <body>
    
        <script>
            var request=indexedDB.open("textDB",6);
            //数据库不存在则创建,存在则打开
            //第二个参数是版本号,只能比上一次增加,不能减少,否则会报错
    
            request.onsuccess=function(){
                console.log("创建数据库成功~");
            }
            request.onerror=function(){
                console.log("读取数据库失败~");
            }
            request.onupgradeneeded=function(){
                console.log("版本号升级啦~");
            }
        </script>
    </body>
    </html>

    创建表

    indexedDB.createObjectStore

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>localStorage</title>
    </head>
    <body>
    
        <script>
            var request=indexedDB.open("textDB",7);
            //数据库不存在则创建,存在则打开
            //第二个参数是版本号,只能比上一次增加,不能减少,否则会报错
    
            request.onsuccess=function(){
                console.log("创建数据库成功~");
            }
            request.onerror=function(){
                console.log("读取数据库失败~");
            }
            request.onupgradeneeded=function(){
                console.log("版本号升级啦~");
    
                //创建数据表
                var db=request.result;
                db.createObjectStore("test");
            }
        </script>
    </body>
    </html>

    设置主键的2种方法:

    1、设置自增主键 autoIncrement:true 

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>localStorage</title>
    </head>
    <body>
    
        <script>
            var request=indexedDB.open("textDB",7);
            //数据库不存在则创建,存在则打开
            //第二个参数是版本号,只能比上一次增加,不能减少,否则会报错
    
            request.onsuccess=function(){
                console.log("创建数据库成功~");
            }
            request.onerror=function(){
                console.log("读取数据库失败~");
            }
            request.onupgradeneeded=function(){
                console.log("版本号升级啦~");
    
                //创建数据表
                var db=request.result;
                db.createObjectStore("test",{autoIncrement:true});
            }
    
            // var json={
            //     "id":1001,
            //     "name":"cyy",
            //     "age":25
            // };
            var json={
                "id":1002,
                "name":"cyy2",
                "age":25
            };
    
            setTimeout(function(){
                //获取数据库
                var db=request.result;
                //指定表名和打开方式
                var transaction=db.transaction("test","readwrite");
                //指定存储操作
                var store=transaction.objectStore("test");
                //存入数据
                store.add(json);
    
            },300)
        </script>
    </body>
    </html>

    2、取数据中字段为主键 keyPath: 字段名

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>localStorage</title>
    </head>
    <body>
    
        <script>
            var request=indexedDB.open("textDB",8);
            //数据库不存在则创建,存在则打开
            //第二个参数是版本号,只能比上一次增加,不能减少,否则会报错
    
            request.onsuccess=function(){
                console.log("创建数据库成功~");
            }
            request.onerror=function(){
                console.log("读取数据库失败~");
            }
            request.onupgradeneeded=function(){
                console.log("版本号升级啦~");
    
                //创建数据表
                var db=request.result;
                db.createObjectStore("test2",{keyPath:"id"});
            }
    
            var json={
                "id":1001,
                "name":"cyy",
                "age":25
            };
            // var json={
            //     "id":1002,
            //     "name":"cyy2",
            //     "age":25
            // };
    
            setTimeout(function(){
                //获取数据库
                var db=request.result;
                //指定表名和打开方式
                var transaction=db.transaction("test2","readwrite");
                //指定存储操作
                var store=transaction.objectStore("test2");
                //存入数据
                store.add(json);
    
            },300)
        </script>
    </body>
    </html>

    使用事务获取表

    indexedDB-->transaction-->objectStore

    事务模式

    readwrite 读写 readonly 只读

    增加数据 .add

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>localStorage</title>
    </head>
    <body>
    
        <script>
            var request=indexedDB.open("textDB",8);
            //数据库不存在则创建,存在则打开
            //第二个参数是版本号,只能比上一次增加,不能减少,否则会报错
    
            request.onsuccess=function(){
                console.log("创建数据库成功~");
            }
            request.onerror=function(){
                console.log("读取数据库失败~");
            }
            request.onupgradeneeded=function(){
                console.log("版本号升级啦~");
    
                //创建数据表
                var db=request.result;
                db.createObjectStore("test2",{keyPath:"id"});
            }
    
            var json=[{
                "id":1001,
                "name":"cyy",
                "age":25
            },{
                "id":1002,
                "name":"cyy2",
                "age":25
            },{
                "id":1003,
                "name":"cyy3",
                "age":25
            }];
    
            setTimeout(function(){
                //获取数据库
                var db=request.result;
                //指定表名和打开方式
                var transaction=db.transaction("test2","readwrite");
                //指定存储操作
                var store=transaction.objectStore("test2");
                //增加数据
                //store.add(json);
                
                //增加数据
                for(var i=0;i<json.length;i++){
                   store.add(json[i]);
                }
    
            },300)
        </script>
    </body>
    </html>

    获取数据 .get

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>localStorage</title>
    </head>
    <body>
    
        <script>
            var request=indexedDB.open("textDB",8);
            //数据库不存在则创建,存在则打开
            //第二个参数是版本号,只能比上一次增加,不能减少,否则会报错
    
            request.onsuccess=function(){
                console.log("创建数据库成功~");
            }
            request.onerror=function(){
                console.log("读取数据库失败~");
            }
            request.onupgradeneeded=function(){
                console.log("版本号升级啦~");
    
                //创建数据表
                var db=request.result;
                db.createObjectStore("test2",{keyPath:"id"});
            }
    
            var json=[{
                "id":1001,
                "name":"cyy",
                "age":25
            },{
                "id":1002,
                "name":"cyy2",
                "age":25
            },{
                "id":1003,
                "name":"cyy3",
                "age":25
            }];
    
            setTimeout(function(){
                //获取数据库
                var db=request.result;
                //指定表名和打开方式
                var transaction=db.transaction("test2","readwrite");
                //指定存储操作
                var store=transaction.objectStore("test2");
                //增加数据
                //store.add(json);
                
                //增加数据
                // for(var i=0;i<json.length;i++){
                //     store.add(json[i]);
                // }
    
                //获取数据 get(key)
                var requestNode=store.get(1001);
                requestNode.onsuccess=function(){
                    console.log(requestNode);
                    console.log(requestNode.result.name);
                    console.log(requestNode.result.age);
                }
    
            },300)
        </script>
    </body>
    </html>

    自增主键的key值获取

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>localStorage</title>
    </head>
    <body>
    
        <script>
            var request=indexedDB.open("textDB",9);
            //数据库不存在则创建,存在则打开
            //第二个参数是版本号,只能比上一次增加,不能减少,否则会报错
    
            request.onsuccess=function(){
                console.log("创建数据库成功~");
            }
            request.onerror=function(){
                console.log("读取数据库失败~");
            }
            request.onupgradeneeded=function(){
                console.log("版本号升级啦~");
    
                //创建数据表
                var db=request.result;
                db.createObjectStore("test3",{autoIncrement:true});
            }
    
            var json=[{
                "id":1001,
                "name":"cyy",
                "age":25
            },{
                "id":1002,
                "name":"cyy2",
                "age":25
            },{
                "id":1003,
                "name":"cyy3",
                "age":25
            }];
    
            setTimeout(function(){
                //获取数据库
                var db=request.result;
                //指定表名和打开方式
                var transaction=db.transaction("test3","readwrite");
                //指定存储操作
                var store=transaction.objectStore("test3");
                //增加数据
                //store.add(json);
                
                //增加数据
                for(var i=0;i<json.length;i++){
                    store.add(json[i]);
                }
    
                //获取数据 get(key)
                //自增主键的id从1开始
                var requestNode=store.get(1);
                requestNode.onsuccess=function(){
                    console.log(requestNode);
                    console.log(requestNode.result.name);
                    console.log(requestNode.result.age);
                }
    
            },300)
        </script>
    </body>
    </html>

     

    获取所有数据 getAll

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>localStorage</title>
    </head>
    <body>
    
        <script>
            var request=indexedDB.open("textDB",10);
            //数据库不存在则创建,存在则打开
            //第二个参数是版本号,只能比上一次增加,不能减少,否则会报错
    
            request.onsuccess=function(){
                console.log("创建数据库成功~");
            }
            request.onerror=function(){
                console.log("读取数据库失败~");
            }
            request.onupgradeneeded=function(){
                console.log("版本号升级啦~");
    
                //创建数据表
                var db=request.result;
                db.createObjectStore("test3",{autoIncrement:true});
            }
    
            var json=[{
                "id":1001,
                "name":"cyy",
                "age":25
            },{
                "id":1002,
                "name":"cyy2",
                "age":25
            },{
                "id":1003,
                "name":"cyy3",
                "age":25
            }];
    
            setTimeout(function(){
                //获取数据库
                var db=request.result;
                //指定表名和打开方式
                var transaction=db.transaction("test3","readwrite");
                //指定存储操作
                var store=transaction.objectStore("test3");
                //增加数据
                //store.add(json);
                
                //增加数据
                for(var i=0;i<json.length;i++){
                    store.add(json[i]);
                }
    
                //获取数据 get(key)
                //自增主键的id从1开始
                var requestNode=store.getAll();
                requestNode.onsuccess=function(){
                    console.log(requestNode);
    
                    for(var i=0;i<requestNode.result.length;i++){
                        console.log(requestNode.result[i].name);
                        console.log(requestNode.result[i].age);
                    }                
                }
    
            },300)
        </script>
    </body>
    </html>

    修改数据 .put

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>localStorage</title>
    </head>
    <body>
    
        <script>
            var request=indexedDB.open("textDB",10);
            //数据库不存在则创建,存在则打开
            //第二个参数是版本号,只能比上一次增加,不能减少,否则会报错
    
            request.onsuccess=function(){
                console.log("创建数据库成功~");
            }
            request.onerror=function(){
                console.log("读取数据库失败~");
            }
            request.onupgradeneeded=function(){
                console.log("版本号升级啦~");
    
                //创建数据表
                var db=request.result;
                db.createObjectStore("test3",{autoIncrement:true});
            }
    
            var json=[{
                "id":1001,
                "name":"cyy",
                "age":25
            },{
                "id":1002,
                "name":"cyy2",
                "age":25
            },{
                "id":1003,
                "name":"cyy3",
                "age":25
            }];
    
            setTimeout(function(){
                //获取数据库
                var db=request.result;
                //指定表名和打开方式
                var transaction=db.transaction("test3","readwrite");
                //指定存储操作
                var store=transaction.objectStore("test3");
                
                //增加数据
                // for(var i=0;i<json.length;i++){
                //     store.add(json[i]);
                // }
                
                //补加数据
                store.put({
                    "id":1004,
                    "name":"cyy4",
                    "age":25
                });
    
            },300)
        </script>
    </body>
    </html>

    .delete 删除数据

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>localStorage</title>
    </head>
    <body>
    
        <script>
            var request=indexedDB.open("textDB",10);
            //数据库不存在则创建,存在则打开
            //第二个参数是版本号,只能比上一次增加,不能减少,否则会报错
    
            request.onsuccess=function(){
                console.log("创建数据库成功~");
            }
            request.onerror=function(){
                console.log("读取数据库失败~");
            }
            request.onupgradeneeded=function(){
                console.log("版本号升级啦~");
    
                //创建数据表
                var db=request.result;
                db.createObjectStore("test3",{autoIncrement:true});
            }
    
            var json=[{
                "id":1001,
                "name":"cyy",
                "age":25
            },{
                "id":1002,
                "name":"cyy2",
                "age":25
            },{
                "id":1003,
                "name":"cyy3",
                "age":25
            }];
    
            setTimeout(function(){
                //获取数据库
                var db=request.result;
                //指定表名和打开方式
                var transaction=db.transaction("test3","readwrite");
                //指定存储操作
                var store=transaction.objectStore("test3");
                
                //删除数据
                store.delete(4);
    
            },300)
        </script>
    </body>
    </html>

    .clear 清除所有数据

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>localStorage</title>
    </head>
    <body>
    
        <script>
            var request=indexedDB.open("textDB",10);
            //数据库不存在则创建,存在则打开
            //第二个参数是版本号,只能比上一次增加,不能减少,否则会报错
    
            request.onsuccess=function(){
                console.log("创建数据库成功~");
            }
            request.onerror=function(){
                console.log("读取数据库失败~");
            }
            request.onupgradeneeded=function(){
                console.log("版本号升级啦~");
    
                //创建数据表
                var db=request.result;
                db.createObjectStore("test3",{autoIncrement:true});
            }
    
            var json=[{
                "id":1001,
                "name":"cyy",
                "age":25
            },{
                "id":1002,
                "name":"cyy2",
                "age":25
            },{
                "id":1003,
                "name":"cyy3",
                "age":25
            }];
    
            setTimeout(function(){
                //获取数据库
                var db=request.result;
                //指定表名和打开方式
                var transaction=db.transaction("test3","readwrite");
                //指定存储操作
                var store=transaction.objectStore("test3");
                
                //清空数据
                store.clear();
    
            },300)
        </script>
    </body>
    </html>

    onsuccess 执行查询完成后的回调

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>localStorage</title>
    </head>
    <body>
    
        <script>
            var request=indexedDB.open("textDB",10);
            //数据库不存在则创建,存在则打开
            //第二个参数是版本号,只能比上一次增加,不能减少,否则会报错
    
            request.onsuccess=function(){
                console.log("创建数据库成功~");
            }
            request.onerror=function(){
                console.log("读取数据库失败~");
            }
            request.onupgradeneeded=function(){
                console.log("版本号升级啦~");
    
                //创建数据表
                var db=request.result;
                db.createObjectStore("test3",{autoIncrement:true});
            }
    
            var json=[{
                "id":1001,
                "name":"cyy",
                "age":25
            },{
                "id":1002,
                "name":"cyy2",
                "age":25
            },{
                "id":1003,
                "name":"cyy3",
                "age":25
            }];
    
            setTimeout(function(){
                //获取数据库
                var db=request.result;
                //指定表名和打开方式
                var transaction=db.transaction("test3","readwrite");
                //指定存储操作
                var store=transaction.objectStore("test3");
                
                var requestNode=store.put({
                    "id":1003,
                    "name":"cyy3",
                    "age":25
                });
                requestNode.onsuccess=function(){
                    console.log("数据追加成功");
                }
    
    
            },300)
        </script>
    </body>
    </html>

     

    result 可以看到相关数据

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>localStorage</title>
    </head>
    <body>
    
        <script>
            var request=indexedDB.open("textDB",10);
            //数据库不存在则创建,存在则打开
            //第二个参数是版本号,只能比上一次增加,不能减少,否则会报错
    
            request.onsuccess=function(){
                console.log("创建数据库成功~");
            }
            request.onerror=function(){
                console.log("读取数据库失败~");
            }
            request.onupgradeneeded=function(){
                console.log("版本号升级啦~");
    
                //创建数据表
                var db=request.result;
                db.createObjectStore("test3",{autoIncrement:true});
            }
    
            var json=[{
                "id":1001,
                "name":"cyy",
                "age":25
            },{
                "id":1002,
                "name":"cyy2",
                "age":25
            },{
                "id":1003,
                "name":"cyy3",
                "age":25
            }];
    
            setTimeout(function(){
                //获取数据库
                var db=request.result;
                //指定表名和打开方式
                var transaction=db.transaction("test3","readwrite");
                //指定存储操作
                var store=transaction.objectStore("test3");
                
                var requestNode=store.put({
                    "id":1003,
                    "name":"cyy3",
                    "age":25
                });
                requestNode.onsuccess=function(){
                    console.log(requestNode.result);
                }
    
    
            },300)
        </script>
    </body>
    </html>

     

    创建索引 createIndex

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>localStorage</title>
    </head>
    <body>
    
        <script>
            var request=indexedDB.open("textDB",12);
            //数据库不存在则创建,存在则打开
            //第二个参数是版本号,只能比上一次增加,不能减少,否则会报错
    
            request.onsuccess=function(){
                console.log("创建数据库成功~");
            }
            request.onerror=function(){
                console.log("读取数据库失败~");
            }
            request.onupgradeneeded=function(){
                console.log("版本号升级啦~");
    
                //创建数据表
                var db=request.result;
                var store=db.createObjectStore("test3",{keyPath:"id"});
    
                //创建索引
                store.createIndex("test3","name",{unique:false});
                
            }
    
            var json=[{
                "id":1001,
                "name":"cyy",
                "age":25
            },{
                "id":1002,
                "name":"cyy2",
                "age":25
            },{
                "id":1003,
                "name":"cyy3",
                "age":25
            }];
    
            setTimeout(function(){
                //获取数据库
                var db=request.result;
                //指定表名和打开方式
                var transaction=db.transaction("test3","readwrite");
                //指定存储操作
                var store=transaction.objectStore("test3");
                
                for(var i=0;i<json.length;i++){
                    store.add(json[i]);
                }
    
    
            },300)
        </script>
    </body>
    </html>

     

    如果设置unique为true,但又存在同名字段,则数据添加失败

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>localStorage</title>
    </head>
    <body>
    
        <script>
            var request=indexedDB.open("textDB",13);
            //数据库不存在则创建,存在则打开
            //第二个参数是版本号,只能比上一次增加,不能减少,否则会报错
    
            request.onsuccess=function(){
                console.log("创建数据库成功~");
            }
            request.onerror=function(){
                console.log("读取数据库失败~");
            }
            request.onupgradeneeded=function(){
                console.log("版本号升级啦~");
    
                //创建数据表
                var db=request.result;
                var store=db.createObjectStore("test3",{keyPath:"id"});
    
                //创建索引
                store.createIndex("test3","name",{unique:true});
                
            }
    
            var json=[{
                "id":1001,
                "name":"cyy",
                "age":25
            },{
                "id":1002,
                "name":"cyy2",
                "age":25
            },{
                "id":1003,
                "name":"cyy3",
                "age":25
            },{
                "id":1004,
                "name":"cyy3",
                "age":25
            }];
    
            setTimeout(function(){
                //获取数据库
                var db=request.result;
                //指定表名和打开方式
                var transaction=db.transaction("test3","readwrite");
                //指定存储操作
                var store=transaction.objectStore("test3");
                
                for(var i=0;i<json.length;i++){
                    store.add(json[i]);
                }
    
    
            },300)
        </script>
    </body>
    </html>

    使用索引获取数据

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>localStorage</title>
    </head>
    <body>
    
        <script>
            var request=indexedDB.open("textDB",15);
            //数据库不存在则创建,存在则打开
            //第二个参数是版本号,只能比上一次增加,不能减少,否则会报错
    
            request.onsuccess=function(){
                console.log("创建数据库成功~");
            }
            request.onerror=function(){
                console.log("读取数据库失败~");
            }
            request.onupgradeneeded=function(){
                console.log("版本号升级啦~");
    
                //创建数据表
                var db=request.result;
                var store=db.createObjectStore("test3",{keyPath:"id"});
    
                //创建索引 通过name查找
                store.createIndex("test3","name",{unique:false});
                
            }
    
            var json=[{
                "id":1001,
                "name":"cyy",
                "age":25
            },{
                "id":1002,
                "name":"cyy2",
                "age":25
            },{
                "id":1003,
                "name":"cyy3",
                "age":25
            },{
                "id":1004,
                "name":"cyy3",
                "age":25
            }];
    
            setTimeout(function(){
                //获取数据库
                var db=request.result;
                //指定表名和打开方式
                var transaction=db.transaction("test3","readwrite");
                //指定存储操作
                var store=transaction.objectStore("test3");
                
                // for(var i=0;i<json.length;i++){
                //     store.add(json[i]);
                // }
    
                //通过索引查找数据
                var index=store.index("test3");
                index.get("cyy2").onsuccess=function(e){
                    console.log(e.target.result);
                }
    
            },300)
        </script>
    </body>
    </html>

    使用索引的好处

    1、可以使用存储记录中的值进行检索

    2、索引自动更新

    3、索引数据自动排序

    创建游标

    .openCursor()

    游标范围:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>localStorage</title>
    </head>
    <body>
    
        <script>
            var request=indexedDB.open("textDB",15);
            //数据库不存在则创建,存在则打开
            //第二个参数是版本号,只能比上一次增加,不能减少,否则会报错
    
            request.onsuccess=function(){
                console.log("创建数据库成功~");
            }
            request.onerror=function(){
                console.log("读取数据库失败~");
            }
            request.onupgradeneeded=function(){
                console.log("版本号升级啦~");
    
                //创建数据表
                var db=request.result;
                var store=db.createObjectStore("test3",{keyPath:"id"});
    
                
            }
    
            var json=[{
                "id":1001,
                "name":"cyy",
                "age":25
            },{
                "id":1002,
                "name":"cyy2",
                "age":25
            },{
                "id":1003,
                "name":"cyy3",
                "age":25
            },{
                "id":1004,
                "name":"cyy3",
                "age":25
            }];
    
            setTimeout(function(){
                //获取数据库
                var db=request.result;
                //指定表名和打开方式
                var transaction=db.transaction("test3","readwrite");
                //指定存储操作
                var store=transaction.objectStore("test3");
                
                // for(var i=0;i<json.length;i++){
                //     store.add(json[i]);
                // }
                
                //创建游标
                var requestNode=store.openCursor(IDBKeyRange.only(1004));
                requestNode.onsuccess=function(){
                    console.log(requestNode.result.value);
                }
            },300)
        </script>
    </body>
    </html>

    带范围的循环输出

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>localStorage</title>
    </head>
    <body>
    
        <script>
            var request=indexedDB.open("textDB",15);
            //数据库不存在则创建,存在则打开
            //第二个参数是版本号,只能比上一次增加,不能减少,否则会报错
    
            request.onsuccess=function(){
                console.log("创建数据库成功~");
            }
            request.onerror=function(){
                console.log("读取数据库失败~");
            }
            request.onupgradeneeded=function(){
                console.log("版本号升级啦~");
    
                //创建数据表
                var db=request.result;
                var store=db.createObjectStore("test3",{keyPath:"id"});
    
                
            }
    
            var json=[{
                "id":1001,
                "name":"cyy",
                "age":25
            },{
                "id":1002,
                "name":"cyy2",
                "age":25
            },{
                "id":1003,
                "name":"cyy3",
                "age":25
            },{
                "id":1004,
                "name":"cyy3",
                "age":25
            }];
    
            setTimeout(function(){
                //获取数据库
                var db=request.result;
                //指定表名和打开方式
                var transaction=db.transaction("test3","readwrite");
                //指定存储操作
                var store=transaction.objectStore("test3");
                
                // for(var i=0;i<json.length;i++){
                //     store.add(json[i]);
                // }
                
                //创建游标
                var requestNode=store.openCursor(IDBKeyRange.upperBound(1002));
                requestNode.onsuccess=function(){
                    //带范围的循环输出
                    var cursor=requestNode.result;
                    if(cursor){
                        console.log(cursor.value);
                        cursor.continue();
                    }
                }
            },300)
        </script>
    </body>
    </html>

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>localStorage</title>
    </head>
    <body>
    
        <script>
            var request=indexedDB.open("textDB",15);
            //数据库不存在则创建,存在则打开
            //第二个参数是版本号,只能比上一次增加,不能减少,否则会报错
    
            request.onsuccess=function(){
                console.log("创建数据库成功~");
            }
            request.onerror=function(){
                console.log("读取数据库失败~");
            }
            request.onupgradeneeded=function(){
                console.log("版本号升级啦~");
    
                //创建数据表
                var db=request.result;
                var store=db.createObjectStore("test3",{keyPath:"id"});
    
                
            }
    
            var json=[{
                "id":1001,
                "name":"cyy",
                "age":25
            },{
                "id":1002,
                "name":"cyy2",
                "age":25
            },{
                "id":1003,
                "name":"cyy3",
                "age":25
            },{
                "id":1004,
                "name":"cyy3",
                "age":25
            }];
    
            setTimeout(function(){
                //获取数据库
                var db=request.result;
                //指定表名和打开方式
                var transaction=db.transaction("test3","readwrite");
                //指定存储操作
                var store=transaction.objectStore("test3");
                
                // for(var i=0;i<json.length;i++){
                //     store.add(json[i]);
                // }
                
                //创建游标
                var requestNode=store.openCursor(IDBKeyRange.bound(1002,1004));
                requestNode.onsuccess=function(){
                    //带范围的循环输出
                    var cursor=requestNode.result;
                    if(cursor){
                        console.log(cursor.value);
                        cursor.continue();
                    }
                }
            },300)
        </script>
    </body>
    </html>

    设置游标的direction

    next 顺序查询 prev 逆序查询

    nextunique 顺序唯一查询  prevunique 逆序唯一查询

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>localStorage</title>
    </head>
    <body>
    
        <script>
            var request=indexedDB.open("textDB",15);
            //数据库不存在则创建,存在则打开
            //第二个参数是版本号,只能比上一次增加,不能减少,否则会报错
    
            request.onsuccess=function(){
                console.log("创建数据库成功~");
            }
            request.onerror=function(){
                console.log("读取数据库失败~");
            }
            request.onupgradeneeded=function(){
                console.log("版本号升级啦~");
    
                //创建数据表
                var db=request.result;
                var store=db.createObjectStore("test3",{keyPath:"id"});
    
                
            }
    
            var json=[{
                "id":1001,
                "name":"cyy",
                "age":25
            },{
                "id":1002,
                "name":"cyy2",
                "age":25
            },{
                "id":1003,
                "name":"cyy3",
                "age":25
            },{
                "id":1004,
                "name":"cyy3",
                "age":25
            }];
    
            setTimeout(function(){
                //获取数据库
                var db=request.result;
                //指定表名和打开方式
                var transaction=db.transaction("test3","readwrite");
                //指定存储操作
                var store=transaction.objectStore("test3");
                
                // for(var i=0;i<json.length;i++){
                //     store.add(json[i]);
                // }
                
                //创建游标
                var requestNode=store.openCursor(IDBKeyRange.bound(1002,1004),"prev");
                requestNode.onsuccess=function(){
                    //带范围的循环输出
                    var cursor=requestNode.result;
                    if(cursor){
                        console.log(cursor.value);
                        cursor.continue();
                    }
                }
            },300)
        </script>
    </body>
    </html>

    使用游标的好处:

    1、可以查询指定数据集范围

    2、拥有逆序遍历能力

    索引和游标的结合使用

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>localStorage</title>
    </head>
    <body>
    
        <script>
            var request=indexedDB.open("textDB",16);
            //数据库不存在则创建,存在则打开
            //第二个参数是版本号,只能比上一次增加,不能减少,否则会报错
    
            request.onsuccess=function(){
                console.log("创建数据库成功~");
            }
            request.onerror=function(){
                console.log("读取数据库失败~");
            }
            request.onupgradeneeded=function(){
                console.log("版本号升级啦~");
    
                //创建数据表
                var db=request.result;
                var store=db.createObjectStore("test3",{keyPath:"id"});
    
                //创建索引
                store.createIndex("test3","age",{unique:true});
            }
    
            var json=[{
                "id":1001,
                "name":"cyy",
                "age":21
            },{
                "id":1002,
                "name":"cyy2",
                "age":22
            },{
                "id":1003,
                "name":"cyy3",
                "age":23
            },{
                "id":1004,
                "name":"cyy3",
                "age":24
            }];
    
            setTimeout(function(){
                //获取数据库
                var db=request.result;
                //指定表名和打开方式
                var transaction=db.transaction("test3","readwrite");
                //指定存储操作
                var store=transaction.objectStore("test3");
                
                // for(var i=0;i<json.length;i++){
                //     store.add(json[i]);
                // }
                
                //索引
                var index=store.index("test3");
                //游标
                var requestNode=index.openCursor(IDBKeyRange.upperBound(23));
                requestNode.onsuccess=function(){
                    //带范围的循环输出
                    var cursor=requestNode.result;
                    if(cursor){
                        console.log(cursor.value);
                        cursor.continue();
                    }
                }
    
            },300)
        </script>
    </body>
    </html>

    .update 在查询操作中更新数据

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>localStorage</title>
    </head>
    <body>
    
        <script>
            var request=indexedDB.open("textDB",16);
            //数据库不存在则创建,存在则打开
            //第二个参数是版本号,只能比上一次增加,不能减少,否则会报错
    
            request.onsuccess=function(){
                console.log("创建数据库成功~");
            }
            request.onerror=function(){
                console.log("读取数据库失败~");
            }
            request.onupgradeneeded=function(){
                console.log("版本号升级啦~");
    
                //创建数据表
                var db=request.result;
                var store=db.createObjectStore("test3",{keyPath:"id"});
    
                //创建索引
                store.createIndex("test3","age",{unique:true});
            }
    
            var json=[{
                "id":1001,
                "name":"cyy",
                "age":21
            },{
                "id":1002,
                "name":"cyy2",
                "age":22
            },{
                "id":1003,
                "name":"cyy3",
                "age":23
            },{
                "id":1004,
                "name":"cyy3",
                "age":24
            }];
    
            setTimeout(function(){
                //获取数据库
                var db=request.result;
                //指定表名和打开方式
                var transaction=db.transaction("test3","readwrite");
                //指定存储操作
                var store=transaction.objectStore("test3");
                
                // for(var i=0;i<json.length;i++){
                //     store.add(json[i]);
                // }
                
                //索引
                var index=store.index("test3");
                //游标
                var requestNode=index.openCursor(IDBKeyRange.upperBound(23));
                requestNode.onsuccess=function(){
                    //带范围的循环输出
                    var cursor=requestNode.result;
                    if(cursor){
                        if(cursor.value.name=="cyy2"){
                            cursor.update({
                                "id":1002,
                                "name":"cyy2_2",
                                "age":22
                            });
                        }
    
                        console.log(cursor.value);
                        cursor.continue();
                    }
                }
    
            },300)
        </script>
    </body>
    </html>

     delete 查询操作中删除数据

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>localStorage</title>
    </head>
    <body>
    
        <script>
            var request=indexedDB.open("textDB",16);
            //数据库不存在则创建,存在则打开
            //第二个参数是版本号,只能比上一次增加,不能减少,否则会报错
    
            request.onsuccess=function(){
                console.log("创建数据库成功~");
            }
            request.onerror=function(){
                console.log("读取数据库失败~");
            }
            request.onupgradeneeded=function(){
                console.log("版本号升级啦~");
    
                //创建数据表
                var db=request.result;
                var store=db.createObjectStore("test3",{keyPath:"id"});
    
                //创建索引
                store.createIndex("test3","age",{unique:true});
            }
    
            var json=[{
                "id":1001,
                "name":"cyy",
                "age":21
            },{
                "id":1002,
                "name":"cyy2",
                "age":22
            },{
                "id":1003,
                "name":"cyy3",
                "age":23
            },{
                "id":1004,
                "name":"cyy3",
                "age":24
            }];
    
            setTimeout(function(){
                //获取数据库
                var db=request.result;
                //指定表名和打开方式
                var transaction=db.transaction("test3","readwrite");
                //指定存储操作
                var store=transaction.objectStore("test3");
                
                // for(var i=0;i<json.length;i++){
                //     store.add(json[i]);
                // }
                
                //索引
                var index=store.index("test3");
                //游标
                var requestNode=index.openCursor(IDBKeyRange.upperBound(23));
                requestNode.onsuccess=function(){
                    //带范围的循环输出
                    var cursor=requestNode.result;
                    if(cursor){
                        if(cursor.value.name=="cyy2_2"){
                            cursor.delete().onsuccess=function(){
                                console.log("数据删除成功");
                            }
                        }
    
                        console.log(cursor.value);
                        cursor.continue();
                    }
                }
    
            },300)
        </script>
    </body>
    </html>

     indexedDB 与 webStorage 比较

     indexedDB 优势:

    存储类型丰富,条件搜索优势明显,可以在worker中使用,存储容量更大

     indexedDB 劣势:

    兼容性问题明显

    IOS 8-9 不支持(iphone6 iphone6s)

    firefox单次存储blob数据超过50M会抛异常

    IE10&11有部分子功能未实现

    跨域存储限制

  • 相关阅读:
    杂谈:用 Sublime Text 2 写 ActionScript3
    Sublime写MarkDown实时预览
    Cocos2d-Lua (练手) 微信打飞机
    Lua 性能相关笔记
    Lua 学习笔记(十一)元表与元方法
    Lua 学习笔记(十)数据结构
    Lua 学习笔记(九)协同程序(线程thread)
    Lua 学习笔记(八)错误(error)
    Lua 学习笔记(七)编译、执行外部代码块
    Lua 学习笔记(六)迭代器
  • 原文地址:https://www.cnblogs.com/chenyingying0/p/12445422.html
Copyright © 2020-2023  润新知