web sql error "текущая версия базы данных и аргумент` oldVersion` не совпадают " - PullRequest
2 голосов
/ 15 декабря 2011

Я пытаюсь запустить этот набор функций:

function erorr(e) {
  // error getting database
  alert(e.message);
}

window.onload = function() {
    prepareDatabase(erorr);
};

function prepareDatabase(error) {
  return openDatabase('tasks13', '', 'Offline task storage', 3*1024*1024, function (db) {
    db.changeVersion('', '1.0', function (t) {
      t.executeSql('CREATE TABLE tasks (id, detail,status)');
    }, error);
  });
}

Но после запуска я получаю ошибку current version of the database and 'oldVersion' argument do not match.Не уверен, что я здесь не так делаю.

Ответы [ 2 ]

2 голосов
/ 18 мая 2013

Правильный код:

function prepareDatabase(error) {
  return openDatabase('tasks13', '', 'Offline task storage', 3*1024*1024, function (db) {
    db.changeVersion(db.version, '1.0', function (t) {
      t.executeSql('CREATE TABLE tasks (id, detail,status)');
    }, error);
  });
}

Хотя можно открыть любую доступную версию базы данных WebSQL (путем передачи пустой строки в качестве идентификатора версии), вам необходимо явно указать текущую версию базы данных при вызове db.changeVersion. Текущая версия базы данных доступна как db.version.

Это то, что сказано в спецификации:

Убедитесь, что значение первого аргумента метода changeVersion () точно соответствует фактической версии базы данных. Если этого не произойдет, то предварительная проверка завершится неудачей.

С http://www.w3.org/TR/webdatabase/#asynchronous-database-api

0 голосов
/ 16 января 2012

Я столкнулся с той же ошибкой.

Я воздержался от использования db.changeVersion и использовал вместо этого следующий более императивный стиль логики:

this.db = window.openDatabase('myDb', '1.0', 'a comment', 5*1024*1024);
if (this.db) {
    this.db.transaction(function (tx) {
        tx.executeSql('CREATE TABLE IF NOT EXISTS myTable(...)',
            [],
            function(tx, rs) { },
            function(tx, err) { alert("Error in create table occurred: " + err) }
        );
    });
}

Надеюсь, это также сработает.

/ Фредрик

...