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

时间:2016-10-07 12:42:02

标签: javascript indexeddb

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

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

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

Chrome: NotFoundError:无法执行'事务' on' IDBDatabase':找不到其中一个指定的对象库。

我的代码:

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

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

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

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

1 个答案:

答案 0 :(得分:2)

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

如果这是Cordova应用,那么thisthis可能更适合您。