Friday, May 17, 2024
 Popular · Latest · Hot · Upcoming
150
rated 0 times [  152] [ 2]  / answers: 1 / hits: 32236  / 11 Years ago, thu, july 4, 2013, 12:00:00

Is there a way to check if an IndexedDB database already exists? When a program tries to open a database that does not exists the database is created.
The only way that I can think of is something like the following, where I test if an objectStore already exists, if it doesn't, the database is deleted:



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;
}
}

More From » indexeddb

 Answers
68

In the onupgradeneeded callback you can check the version. (e.target.result.oldversion). If
it is 0, the db didn't exist.


Edit:
After some investigation. You can't be 100% sure if a new db is created. One thing I am sure of is the fact that you can only work with an indexeddb if it has a version 1 or higher. I believe that a db can exist and have a version 0 (The only fact is you can't work with it and the onupgradeneeded event will be called).


I have build my own indexeddbviewer. In that I open the indexeddb without version and if I come in to the onupgradeneeded event, that means the db doesn't exist. In that case I call the abort so it doesn't upgrade to a version 1. This is the way I check it.


var dbExists = true;
var request = window.indexeddb.open("db");
request.onupgradeneeded = function (e){
e.target.transaction.abort();
dbExists = false;
}

but as mentioned. It is possible that the db will continue to exist in that case, but the onupgradeneeded will always be called


[#77200] Wednesday, July 3, 2013, 11 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
taylert

Total Points: 627
Total Questions: 91
Total Answers: 108

Location: Mayotte
Member since Mon, Sep 12, 2022
2 Years ago
taylert questions
;