zoukankan      html  css  js  c++  java
  • 浏览器的IndexedDB本地存储

    IndexedDB 中文教程

    https://www.tangshuang.net/3735.html

    简单的示例:

        <script type="text/javascript">
            /**
             * IndexedDB
             * */
            var db; /*数据库对象*/
            var objectStore; /*仓库(表)*/
            /**
             * 创建数据库
             */
            var request = window.indexedDB.open('myIndex', 3); /*该域中的数据库myIndex*/
            request.onerror = function(event) {
                console.log('open database error');
            };
            /**
             * 业务代码
             */
            request.onsuccess = function(event) {
                db = request.result; /*数据库对象*/
                // add();
                // read();
                // update();
                // remove();
                //readAll();
                // console.log(db);
            };
            /**
             * 创建表
             */
            request.onupgradeneeded = function(event) {
                db = event.target.result; /*数据库对象*/
                if(!db.objectStoreNames.contains('person')) {
                    objectStore = db.createObjectStore('person', {
                        keyPath: 'id'
                    }); /*创建person仓库(表) 主键*/
                    // objectStore = db.createObjectStore('person',{autoIncrement:true});/*自动创建主键*/
                    // 创建索引,自己规定的,后面作为根据索引进行查询的依据
                    objectStore.createIndex('name', 'name', {
                        unique: false
                    });
                    objectStore.createIndex('email', 'email', {
                        unique: true
                    });
                }
                console.log(db);
            };
            /**
             * 插入数据
             */
            function add() {
                var request = db.transaction(['person'], 'readwrite')
                    .objectStore('person')
                    .add({
                        id: 3,
                        name: '张三',
                        age: 24,
                        email: 'zhangsan1@example.com'
                    });
                request.onsuccess = function(event) {
                    console.log('数据写入成功');
                };
                request.onerror = function(event) {
                    console.log('数据写入失败');
                };
            }
            /**
             * 读取数据
             */
            function read() {
                var transaction = db.transaction(['person']);
                var objectStore = transaction.objectStore('person');
                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('未获得数据记录');
                    }
                };
            }
    
            /**
             * 遍历数据
             */
            function readAll() {
                var objectStore = db.transaction(['person']).objectStore('person');
                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);
                    } else {
                        console.log('没有更多数据了');
                    }
                }
            }
    
            /**
             * 更新数据
             */
            function update() {
                var request = db.transaction(['person'], 'readwrite')
                    .objectStore('person')
                    .put({
                        id: 1,
                        name: '李四',
                        age: 35,
                        email: 'lisi@example.com'
                    });
                request.onsuccess = function(event) {
                    console.log('数据更新成功');
                };
                request.onerror = function(event) {
                    console.log('数据更新失败');
                };
            }
    
            /**
             * 删除数据
             */
            function remove() {
                var request = db.transaction(['person'], 'readwrite')
                    .objectStore('person')
                    .delete(1);
                request.onsuccess = function(event) {
                    console.log('数据删除成功');
                };
            }
        </script>

    升级版:

    class IndexedDB{
            constructor(dbName, storeName, version){
                this.storeName = storeName;
                const indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB;
                const request = indexedDB.open(dbName, version);
        
                request.onsuccess = e => {
                    this.db = e.target.result;
                    console.log('indexDB初始化成功');
                };
                request.onupgradeneeded = e => {
                    this.db = e.target.result;
                   if(!this.db.objectStoreNames.contains(storeName)){
        
                       
                        this.store = this.db.createObjectStore(storeName);
                    }
                    console.log("数据库创建成功,Version:"+version);
                };
                request.onerror = e => {console.info('数据库创建失败', e);};
            }
            get(key, callback){
                const transaction = this.db.transaction(this.storeName);
                const objectStore = transaction.objectStore(this.storeName);
                const request = objectStore.get(key);
        
                request.onerror = e => {console.info('获取失败', e);};
                request.onsuccess = e => {callback(e.target.result);};
            }
            set(key, value){
                let oldValue;
                this.get(key, function(res){oldValue = res;});
        
                if(oldValue){
                    console.info('请运用更新方法更新!');
                }else{
                    const transaction = this.db.transaction(this.storeName, 'readwrite');
                    const objectStore = transaction.objectStore(this.storeName);
                    const request = objectStore.add(value, key);
        
                    request.onerror = e => {console.info('添加失败', e);};
                }
            }
            update(newValue, key){
                this.get(key,(oldValue)=>{
                    if(!oldValue){
                        console.info('请用set方法设置值');
                    }else{
                        const transaction = this.db.transaction(this.storeName, 'readwrite');
                        const objectStore = transaction.objectStore(this.storeName);
                        const request = objectStore.put(newValue, key);
            
                        request.onerror = e => {console.info('更新失败', e);};
                    }
                });
            }
            remove(key){
                const request = this.db.transaction(this.storeName, 'readwrite')
                        .objectStore(this.storeName)
                        .delete(key);
                request.onerror = e => {console.info('删除失败', e);};
            }
            delete(name){
                window.indexedDB.deleteDatabase(name);
            }
            close(){
                this.db.close();
            }
        }
  • 相关阅读:
    类目(分类)
    协议(Protocol)---实例
    OC 复合 组装电脑
    iOS--九宫格奥秘(UIView)(arc4random)
    字符串
    oc 字符串
    七星彩问题
    OC--第一个程序
    关于行内元素垂直居中的一个小小trick
    关于orgChart
  • 原文地址:https://www.cnblogs.com/xiejn/p/14045182.html
Copyright © 2011-2022 走看看