Web sql 错误“数据库的当前版本和‘oldVersion’参数不匹配”

发布于 2024-12-21 07:55:51 字数 512 浏览 1 评论 0原文

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

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

但是,运行此函数后,我收到错误当前版本的数据库和“oldVersion”参数不匹配。 不知道我在这里做错了什么。

I am trying to run these set of functions:

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

But, after running this I get an error current version of the database and 'oldVersion' argument do not match.
Not sure what wrong I am doing here.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

黑寡妇 2024-12-28 07:55:51

正确的代码:

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-数据库API

Correct code:

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

While it's possible to open any available version of a WebSQL db (by passing an empty string as version identifier), you need to explicitly specify the current version of the db when calling db.changeVersion. The current version of the db is made available as db.version.

This is what the specification says:

Check that the value of the first argument to the changeVersion() method exactly matches the database's actual version. If it does not, then the preflight operation fails.

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

终难愈 2024-12-28 07:55:51

我遇到了同样的错误。

我没有使用 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) }
        );
    });
}

希望它也适合您。

/弗雷德里克

I ran into the same error.

I refrained from using db.changeVersion and used the following more imperative style of logic instead:

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

Hope it works for you as well.

/Fredrik

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文