有没有办法检查IndexedDB数据库是否已经存在?当程序尝试打开不存在的数据库时,将创建数据库.
我可以想到的唯一方法是像下面这样,我测试一个objectStore是否已经存在,如果没有,数据库被删除:
我可以想到的唯一方法是像下面这样,我测试一个objectStore是否已经存在,如果没有,数据库被删除:
var dbexists=false; var request = window.indexedDB.open("TestDatabase"); request.onupgradeneeded = function(e) { db = e.target.result; if (!db.objectStoreNames.contains('todo')) { db.close(); indexedDB.deleteDatabase("TestDatabase"); } else { dbexists=true; } }
解决方法
在onupgradedeeded回调你可以检查版本. (e.target.result.oldversion).如果
它是0,db不存在.
它是0,db不存在.
编辑:
经过一番调查.您不能100%确定是否创建新的数据库.我确定的一件事是,如果它具有版本1或更高版本,则只能使用indexeddb.我相信数据库可以存在并具有版本0(唯一的事实是你不能使用它,并且onupgradeneeded事件将被调用).
我已经建立了自己的indexeddbviewer.因为我打开没有版本的indexeddb,如果我进入onupgradeneeded事件,那意味着db不存在.在这种情况下,我称之为中止,所以它不升级到版本1.这是我检查它的方式.
var dbExists = true; var request = window.indexeddb.open("db"); request.onupgradeneeded = function (e){ e.target.transaction.abort(); dbExists = false; }
但如前所述.在这种情况下,db可能会继续存在,但是会调用onupgradeneeded