修复indexedDB

cld4siwp  于 2023-11-15  发布在  IndexedDB
关注(0)|答案(2)|浏览(182)

有没有一种方法可以保证indexedDB中对象存储的存在而不改变版本号?
内容:
我的一个用户有一个indexedDB设置为与其他人相同的版本,但没有对象存储。我不知道他们是如何做到的,所以我不能预测它是否会再次发生,我不知道这个问题在公共竞技场中会有多普遍。
我尝试使用以下代码重建丢失的objectStore

this.request = window.indexedDB.open(this.dbName, this.DB_VERSION);
    this.request.onsuccess = (event) => {
        const database = event.target.result;
        if (!database.objectStoreNames.contains(store)) {
                const newStore = database.createObjectStore(store, {keyPath: 'key'});
                newStore.createIndex('expiry_idx', 'exp');
        }
    }

字符串
但是浏览器说我不能运行ObjectStore,除非我在oncode.exe事件中。在这一点上,数据库没有升级。这个用户和其他所有人都在版本5上。我可以更改代码以尝试打开v6并强制升级以修复它,但是据我所知,其他人可能会损坏v6。

xxb16uws

xxb16uws1#

如果数据库足够小,有一种非常简单的方法可以做到这一点:将所有数据读入内存,删除旧数据库,使用正确的对象存储和正确的版本创建新数据库,然后将所有数据写入其中。

eh57zj3b

eh57zj3b2#

既然你澄清了
.保证indexedDB中对象存储的存在而不改变版本号?
这里意味
创建...如果它不存在
我想答案是否定的
是的,你可以使用IDBDatabase: objectStoreNames property检查它是否存在。它返回一个DOMStringList,你可以用它来调用contains()方法。但是你不能在没有版本升级的情况下创建一个对象存储(如果它还不存在)。
此方法只能在versionchange事务中调用。
IDBDatabase: createObjectStore() method

相关问题