有没有办法检查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