IndexedDB “操作失败,因为找不到请求的数据库对象。”

Nih*_*hir 5 javascript indexeddb

我正在创建一个脚本来从数据库中读取一个属性 - 由于项目的架构,如果这在 JS 中实现是最简单的。

我正在使用 IndexedDB,并且可以成功找到数据库,但是当我尝试从 objectStore 获取属性时出现错误(似乎我无法访问表):

Firefox: “NotFoundError:操作失败,因为找不到请求的数据库对象。例如,对象存储不存在但正在打开。”

Chrome: NotFoundError:无法在“IDBDatabase”上执行“transaction”:未找到指定的对象存储之一。

我的代码:

var request = window.indexedDB.open("/app_name/database.sqlite", 1);
request.onsuccess = function(event) {
    console.log("Found Database");
    db = event.target.result;

    var transaction = db.transaction(["TABLE"], "readonly");
    var objectStore = transaction.objectStore("TABLE");
    var ob = objectStore.get(String(ATTRIBUTE));

    ob.onsuccess = function(e) {
        console.log("Got ATTRIBUTE")
    }
    ob.onerror = function(e) {
        console.log("Have not got ATTRIBUTE")
    }

}
request.onerror = function(event) {
    console.log("Database not found");
}
Run Code Online (Sandbox Code Playgroud)

错误发生在线路上var transaction = db.transaction(["TABLE"], "readonly");

TABLE 确实存在 - 在查看器中打开数据库时,属性就在那里。

我没有使用过,.onupgradeneeded因为我没有创建任何新的对象存储 - 而只是尝试读取一个。

dum*_*ter 2

您似乎正在尝试使用 IndexedDB 来读取现有的 SQLite 文件。那是行不通的。IndexedDB 在浏览器中是独立的,与外部文件没有任何关系。创建对象存储的唯一方法是在 中进行onupgradendeeded,然后您还必须编写代码以将数据加载到其中。

如果这是 Cordova 应用程序,也许这个这个更适合您。