数据库当前版本与' oldVersion '参数不匹配

web sql error "current version of the database and `oldVersion` argument do not match"

本文关键字:参数 不匹配 oldVersion 当前版本 数据库      更新时间:2023-09-26

我正在尝试运行这些函数集:

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。我不知道我在这里做错了什么。

正确代码:

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

我也遇到了同样的错误。

我避免使用db。并使用以下更具命令式风格的逻辑:

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

希望它对你也有用。

/弗雷德里克·