2

これらの関数セットを実行しようとしています:

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。ここで何が間違っているのかわかりません。

4

2 に答える 2

2

正しいコード:

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から

于 2013-05-17T20:46:25.807 に答える
-1

同じエラーが発生しました。

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

それがあなたにとってもうまくいくことを願っています。

/フレドリック

于 2012-01-16T14:55:19.807 に答える