web-dev-qa-db-ja.com

「IDBDatabase」で「createObjectStore」を実行できませんでした

なぜエラーが発生するのですか?

私のコード:

var idb = window.indexedDB ||      // Use the standard DB API
          window.mozIndexedDB ||   // Or Firefox's early version of it
          window.webkitIndexedDB;  // Or Chrome's early version

var IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction;
var IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange;

var dbName='nameDb';

var idbRequest=idb.open(dbName,'4.67' /*,dbDescription  */);

idbRequest.onsuccess=function (e) {
    debugger

    var db=e.target.result; 

    if (!db.objectStoreNames.contains('chat')){
        co=db.createObjectStore('chat',{'id':100});
    };

    if (!db.objectStoreNames.contains('iam')){
        co1=db.createObjectStore('iam');
    }; 
};

idbRequest.onerror = function (e) {
    debugger
};

Uncaught InvalidStateError:「IDBDatabase」で「createObjectStore」の実行に失敗しました:データベースはバージョン変更トランザクションを実行していません。 index.html:37 idbRequest.onsuccess

14
Michael Phelps

objectStoreメソッドでonsuccessを作成することはできません。これは、upgradeneededイベントでのみ実行できます。

ドキュメントからの引用:

新しいデータベースを作成するか、既存のデータベースのバージョン番号を増やすと(データベースを開くときに、以前よりも高いバージョン番号を指定することにより)、onupgradeneededイベントがトリガーされます。このイベントのハンドラーで、このバージョンのデータベースに必要なオブジェクトストアを作成する必要があります

ドキュメント を参照してください。

28