indexedDB データベースをブラウザの現在のバージョンよりも高いバージョンにアップグレードしようとすると例外が発生しますが、おかしな点はアップグレードされることです。これは設計によるものですか、それとも何か間違ったことをしたのですか。
ダーツのサンプル Todo から非常にインスピレーションを得たので、コードは次のようになりました。
void open_db(String DB_name, int Version, String Store_Name){
var request = window.indexedDB.open(DB_name, Version);
request.on.success.add((e) => _onDbOpened(request.result));
request.on.error.add((e) => print("Error opening db"));
request.on.upgradeNeeded.add((e) => _onUpgradeNeeded(request.transaction, Store_Name));
}
void _onDbOpened(IDBDatabase db){
_db = db;
print("DB opened");
}
void _onUpgradeNeeded(IDBTransaction changeVersionTransaction, String Store_Name){
changeVersionTransaction.on.error.add((e) => print("Error upgrading db"));
changeVersionTransaction.on.complete.add((e) => print("Success upgrading db"));
changeVersionTransaction.db.createObjectStore(Store_Name);
}
これをバージョン = 4 で実行し、ブラウザーにバージョン = 3 しかない場合、期待どおりに _onUpgradeNeeded にジャンプしますが、IDBDatabaseException とメッセージ "ConstraintError: DOM IDBDatabase Exception 4" が表示されます。
では、どこが間違っているのでしょうか。