ユーザーが以前のデータベース (DB) バージョン (ハンドラーでoldVersion
検出された) から最近のバージョン (オープンしようとしている) にデータを移行できるようにする IndexedDB インターフェイスを実装しようとしています。onupgradeneeded
event.target.oldVersion
currentVersion
currentVersion
オープン操作をキャンセルまたは中止しますoldVersion
検出onupgradeneeded
)currentVersion
DBを開く通常のプロセスを続行します)アップグレード イベントをoldVersion
中止できない (例外 11) currentVersion
(キャンセルすることもできない) ため、開くときに問題が発生します。
例外 11: 許可されていないオブジェクトに対して、または許可されていないときに操作が呼び出されました。
...currentVersion
を開くために、 のアップグレード イベントを何らかの方法でキャンセルまたは中止することは可能oldVersion
ですか?
注: ... そうでない場合、私が行方不明になっている古いバージョンの DB からデータを移行する別の方法はありますか?
oldVersion を開くために、currentVersion のアップグレード イベントを何らかの方法でキャンセルまたは中止することは可能ですか?
var rq = indexedDB.open(name, ver);
rq.onupgradeneeded = function(e) {
rq.transaction.abort();
};
rq.onsuccess = function(e) { console.log('THIS SHOULD NOT RUN'); };
rq.onerror = function(e) { console.log('This should run'); };
不足している古いバージョンの DB からデータを移行する他の方法はありますか?
通常、これは、提供さupgradeneeded
れたverionchange
トランザクション中に、古いバージョンからデータとスキーマを移行する目的です。
var rq = indexedDB.open(name, 2);
rq.onupgradeneeded = function(e) {
var db = rq.result;
if (e.oldVersion < 1) {
// database didn't exist at all, create new schema
db.createObjectStore('store2');
} else if (e.oldVersion < 2) {
// do the migration - assumes v1 had 'store1'
var store1 = rq.transaction.objectStore('store1');
var store2 = db.createObjectStore('store2');
var r = store1.openCursor();
r.onsuccess = function() {
var cursor = r.result;
if (cursor) {
store2.put(cursor.value, cursor.key);
cursor.continue();
} else {
// migration done, delete old store
db.deleteObjectStore('store1');
}
};
}
};
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加