indexeddb怎么触发onupgradeneeded

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了indexeddb怎么触发onupgradeneeded相关的知识,希望对你有一定的参考价值。

参考技术A IDBOpenDBRequest还有一个类似回调函数句柄——onupgradeneeded。

该句柄在我们请求打开的数据库的版本号和已经存在的数据库版本号不一致的时候调用。

indexedDB.open方法还有第二个可选参数,数据库版本号,数据库创建的时候默认版本号为1,当我们传入的版本号和数据库当前版本号不一致的时候onupgradeneeded就会被调用,当然我们不能试图打开比当前数据库版本低的version.

代码中定义了一个myDB对象,在创建indexedDB request的成功毁掉函数中,把request获取的DB对象赋值给了myDB的db属性,这样就可以使用myDB.db来访问创建的indexedDB了。

indexedDB 使用

数据库的打开/新增/删除

initDB() {
  let _this = this;
  let obj = {
    id: 1,
    name: _this.addForm.content
  }
  let indexedDB = window.indexedDB || window.webkitindexedDB || window.msIndexedDB || mozIndexedDB;
  request = indexedDB.open(‘edp‘); //edp数据库名称
  request.onsuccess = function(event) {
    console.log(‘打开成功‘);
    db = event.target.result;
    //清空表
    let tx = db.transaction(‘messageCode‘, ‘readwrite‘);
    let store = tx.objectStore(‘messageCode‘);
    store.clear();
    //添加表
    let objStore;
    let transaction = db.transaction([‘messageCode‘], ‘readwrite‘);
    objStore = transaction.objectStore(‘messageCode‘);
    objStore.add(obj);
  }
  request.onupgradeneeded = function(event) {
    db = event.target.result;
    let store;
    //创建表
    if(!db.objectStoreNames.contains(‘messageCode‘)) {
      store = db.createObjectStore(‘messageCode‘, {
        keyPath: ‘id‘,
        autoIncrement: true
      });
    }
    console.log(‘创建对象仓库成功‘);
  }
}

更改表

 

//内容更改
changeCode() {
    let obj = {
        id: 1,
        name: this.addForm.content
    }
    //更新表
    let tx = db.transaction(‘messageCode‘, ‘readwrite‘);
    let store = tx.objectStore(‘messageCode‘);
    let req = store.get(1);
    req.onsuccess = function(e) {
        store.put(obj);
        console.log(‘更新成功‘);
    };
},            

 

新页面获取表

 

created() {
    let _this = this;
    var request = window.indexedDB.open(‘edp‘);
    var db;
    request.onerror = function() {
        console.log(‘数据库打开报错‘);
    }
    request.onsuccess = function(event) {
        console.log(‘数据库打开成功‘);
    db = event.target.result;
    var transaction = db.transaction([‘messageCode‘], ‘readwrite‘);
    var objStore = transaction.objectStore(‘messageCode‘);
    // 读取数据
    var req = objStore.get(1);
    req.onsuccess = function(e) {
        if(req.result) {
                console.log(‘已经查询到数据为:‘);
        console.log(req.result);
        _this.online = req.result.name;
        } else {
        console.log(‘未查询到数据‘);
        }
    }
    }
    request.onupgradeneeded = function(event) {
        console.log(‘数据库升级事件‘);
        db = event.target.result;
        console.log(db);
    }
}        

以上是关于indexeddb怎么触发onupgradeneeded的主要内容,如果未能解决你的问题,请参考以下文章

怎么判断浏览器是不是支持html5的indexedDB

indexedDB 在概念上与 HTML5 本地存储有何不同?

懂你网络系列7之浏览器缓存cookie,sessions,localStorage,sessioStoage,indexedDB

懂你网络系列7之浏览器缓存cookie,sessions,localStorage,sessioStoage,indexedDB

indexedDB删除有影响吗

是不是indexeddb数据库一次只能插入五十条数据