IndexedDB -数据库的新版本

mtb9vblg  于 2022-12-09  发布在  IndexedDB
关注(0)|答案(1)|浏览(261)

我的PWA使用IndexedDB存储数据。
现在我发布了2.0版,这需要在第三个ObjectStore中存储数据。
当PWA首次发布时,创建的IndexedDB版本为“1”,如下所示。

var db;
var request = window.indexedDB.open("database-db", 1);

// Creating ObjectStores
request.onupgradeneeded = function(event) {
    var db = event.target.result;

    var driverTable = db.createObjectStore("driver");
    var claimTable = db.createObjectStore("claim", {
        autoIncrement: "true"
    });
};

对于2.0版本,我现在继续在我的“onupgradeneeded”处理程序中创建了另一个ObjectStore(语言),并像这样更改了版本,希望IndexedDB会在后台自动重新加载新版本。

var db;
var request = window.indexedDB.open("database-db", 2);

// Creating ObjectStores
request.onupgradeneeded = function(event) {
    var db = event.target.result;

    var languageTable = db.createObjectStore("language");
    var driverTable = db.createObjectStore("driver");
    var claimTable = db.createObjectStore("claim", {
        autoIncrement: "true"
    });
};

不幸的是,这只适用于两种情况。
1.我在桌面上的Chrome中打开PWA,删除DevTools的应用程序选项卡中的IndexedDB,然后重新加载页面。
1.我以前从未打开过该网站,因此我的浏览器中没有安装IndexedDB。
问题是,我已经有现有的用户,他们没有选择删除他们的智能手机上的IndexedDB,除了这不是一个选项,在用户体验方面。
有没有更好的方法来解决这个问题?
先谢谢你。

yh2wf1be

yh2wf1be1#

是的,有更好的方法来处理这个问题。你可以做基于版本号的检查,或者只是检查东西是否存在。下面是一些简单的示例代码,检查一个商店是否存在,如果不存在,只创建一个商店。

function myOnUpgradeNeeded(event) {
  const db = event.target.result;

  if (db.objectStoreNames.contains('mystorename') {
    console.log('mystorename already exists, not recreating');
  } else {
    console.log('mystorename does not exist,  creating');
    db.createObjectStore('mystorename');
  }
}

如果要在升级时从存储中删除所有对象,则可以添加逻辑,说明如果表存在,则可以清除它。

相关问题