- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
谁能告诉我如何将新的对象库添加到现有的 indexeddb 实例中,该实例中有一个版本号。当我尝试创建新版本时,现有对象存储被删除。
我有一个版本“1”,它有大约 10 个包含数据的对象存储。当我尝试使用新版本号打开同一个数据库时,我丢失了当前数据和对象存储。
这是我尝试过的。
var _upRequest = indexedDB.open("employees");
_upRequest.onsuccess = function (e) {
var thisDb = e.target.result;
var version = parseInt(thisDb.version)+1;
thisDb.close();
var openRequest = indexedDB.open("employees", version);
//handle setup, this will be run by Firefox
openRequest.onupgradeneeded = function (e) {
console.log("running onupgradeneeded");
var thisDb = e.target.result;
//Create Employee
if (!thisDb.objectStoreNames.contains("employee")) {
console.log("I need to make the employee objectstore");
var objectStore = thisDb.createObjectStore("employee", { keyPath: "id", autoIncrement: true });
objectStore.createIndex("searchkey", "searchkey", { unique: false });
}
thisDb.close();
}
openRequest.onsuccess = function (e) {
db = e.target.result;
db.onerror = function (e) {
alert("Sorry, an unforseen error was thrown.");
console.log("***ERROR***");
console.dir(e.target);
}
db.close();
}
}
最佳答案
我没有直接的答案,但你目前编写的代码对我来说似乎很奇怪。
我会首先尝试的一件事是正确绑定(bind) onupgradeneeded、onerror,而不是过早地关闭数据库。
不要这样做:
var request = indexedDB.open();
request.onsuccess = function() {
request.onupgradeneeded = function() {};
};
改为这样做:
var request = indexedDB.open();
request.onsuccess = function() {};
request.onupgradeneeded = function() {};
同样,立即绑定(bind) onerror,而不仅仅是稍后在 onupgradeneeded 或 onsuccess 中,像这样:
var request = indexedDB.open();
request.onsuccess = function() {};
request.onupgradeneeded = function() {};
request.onerror = function() {};
当 indexedDB.open 检测到更高版本或第一个版本时,它将派发一个 upgradeneeded 事件,等待隐含的“versionchange”事务完成,然后派发一个成功事件。
我不太明白你的代码。我不确定您为什么要打开一个连接,关闭它,然后打开第二个连接,然后延迟绑定(bind)需要升级的处理程序。
这就是添加对象存储然后访问它所需要做的全部工作:
var request = indexedDB.open('name', aNumberGreaterThanTheCurrentVersion);
request.onupgradeneeded = function(event) {
console.log('Performing upgrade');
var db = event.target.result;
console.log('Creating object store');
db.createObjectStore('mystore');
};
request.onsuccess = function(event) {
console.log('Connected to database');
var db = event.target.result;
var tx = db.transaction('mystore');
var store = tx.objectStore('mystore');
console.log('Doing something with store "mystore"');
// ...
console.log('Finished doing something, now closing');
db.close();
};
request.onerror = console.error;
另一个注意事项。 indexedDB 会产生不同类型的错误,区分它们很重要。 request.onerror 不会像您的日志消息所暗示的那样“抛出”异常。相反,发生的事情是 indexedDB 调度了一个错误事件。 不会抛出已分派(dispatch)的错误事件。现在,除此之外,indexedDB 的几个函数可以抛出异常。这些需要被 try/catch block 捕获。您甚至不会看到已分派(dispatch)的错误事件。您将收到一个实际的脚本错误,该错误会停止执行,并会自动出现在控制台中,并带有一条信息量不大的消息。
关于javascript - 如何将新的 Objectstore 添加到现有的 indexeddb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38852012/
我一直在尝试使用Dart的IndexedDb包从IndexedDb实例中获得一个条目。但是我将getObject()称为文档说的返回Future *(我不知道的 future ),我没有任何Maps或
作为基本设置的示例,创建了一个索引。 db.onupgradeneeded = function(event) { var db = event.target.result; var st
我有一个选择框,我想用 objectStore 中的值自动填充它,因为我需要像这样迭代它:“从表中选择 COL1,其中 COL2 = 'myvalue'”,这是我的代码: var db; var re
我基本上有这段代码来生成一个带有一个 objectStore 的新数据库: DB.open_or_create({table: 'photos', key: 'url'}); 主要代码: var DB
在 this example ,作者使用以下行: var customerObjectStore = db.transaction("customers", "readwrite").object
有人可以告诉我下面的代码怎么了。主要问题是该行: fDbListAllClients; // this is not being "called" 似乎没有执行。 也可能有其他错误代码。我不担心
我想迭代 IndexedDB objectStore,获取结果并填充此选择框。 这是我的 HTML 这是我的 JavaScript function pop
我试图了解 indexedDB 的工作原理并编写了一个相当基本的站点访问者跟踪器。这是第一次工作。第一次加载页面时,一切都按预期进行。我可以看到数据已添加到我的 objectStore 中。 现在每次
我正在尝试连接到 Bluemix 中的对象存储服务。但是,我不断遇到异常(exception)。这是我的代码: public static void main(String[] args){
我有一个包裹在 dojo.data.ObjectStore 中的 dojo.store.Memory,然后我将其插入到 dataGrid 中。我想从商店中删除一个项目并更新网格。我已经尝试了所有我能想
谁能告诉我如何将新的对象库添加到现有的 indexeddb 实例中,该实例中有一个版本号。当我尝试创建新版本时,现有对象存储被删除。 我有一个版本“1”,它有大约 10 个包含数据的对象存储。当我尝试
对于我的 IndexedDB,我正在拉取各种 Ajax 请求,这些请求将向 objectStore 提供数据。由于事务是异步的,我应该如何链接 objectStores 的创建?我想这样做: 1- 在
第一次使用索引查询时间过长。 使用场景:移动端使用webview。 数据保存到indexedDb后,第一次打开页面查询速度极慢。 查询代码: var startTime = new Date().ge
我使用的是1.7.2当我将项目添加到对象存储时,我写 dataStore.newItem(data); 然后我尝试保存dataStore.save(),然后dijit.byId(gridId)._re
试图学习 IndexedDB 的概念和 API,我正在努力弄清楚如何使用 IDBObjectStore.add 方法为 objectStore 指定键。根据规范,第一个参数是值,第二个可选参数是键。当
所以我看到RestKit的引用中有一个init方法:objectStoreWithStoreFilename:inDirectory:usingSeedDatabaseName:managedObje
我只看到一个在模式更新时触发的事件,IndexedDB 中是否有任何数据更改的通知机制? 最佳答案 没有。至少,它不是规范的一部分。参见 http://lists.w3.org/Archives/Pu
我想知道什么时候拥有一个数据库与一个数据库具有多个对象存储是个好主意。我已经阅读了 Web 上的大多数教程并查看了 indexedDB 的规范,但找不到比较这些不同概念的好例子。有没有人有此类事情的具
我正在努力更新 indexedDB 中 objectStore 中的一系列四个条目。 这就是我想要实现的(伪代码): let myDatabase = indexedDB('myDatabase',
如何在使用 objectstore.put() 将记录插入 IndexedDB 后返回自动递增的 ID? 下面是我的代码: idb.indexedDB.addData = function (obje
我是一名优秀的程序员,十分优秀!