Javascript 如何向IndexedDB中预先存在的ObjectStore添加索引
我知道这个问题已经被问过好几次了。但在多次出错后,我一直无法找到解决方案。这是我的索引数据库的代码Javascript 如何向IndexedDB中预先存在的ObjectStore添加索引,javascript,indexeddb,Javascript,Indexeddb,我知道这个问题已经被问过好几次了。但在多次出错后,我一直无法找到解决方案。这是我的索引数据库的代码 request.onupgradeneeded = function(event) { var db = event.target.result; var upgradeTransaction = event.target.transaction; var objectStore = db.createObjectStore("todostore",
request.onupgradeneeded = function(event) {
var db = event.target.result;
var upgradeTransaction = event.target.transaction;
var objectStore = db.createObjectStore("todostore", {keyPath: "timestamp"});
UserFunction();
};
function UserFunction(){
var ObjectStore = db.transaction("todostore").objectStore("todostore");
var index = ObjectStore.createIndex("ixName", "fieldName");
}
Failed to execute 'createIndex' on 'IDBObjectStore': The database is not running a version change transaction.
我正在调用button click的这个函数,我想在单击按钮时添加带值的索引
<button onclick="UserFunction()">createIndex</button>
createIndex
UserFunction()调用中的代码正在启动一个新事务,而“upgradeneeded”侦听器中已有一个事务正在进行
因此,新事务应该在objectStore.transaction完成后启动
以下是JSFIDLE:
您只能在版本升级期间更改数据库的架构。类似这样的说法是有道理的:
function OnClick() {
// assumes db is a previously opened connection
var oldVersion = db.version;
db.close();
// force an upgrade to a higher version
var open = indexedDB.open(db.name, oldVersion + 1);
open.onupgradeneeded = function() {
var tx = open.transaction;
// grab a reference to the existing object store
var objectStore = tx.objectStore('todostore');
// create the index
var index = objectStore.createIndex('ixName', 'fieldName');
};
open.onsuccess = function() {
// store the new connection for future use
db = open.result;
};
}
可能重复的我已经尝试了以上,但没有工作的meany帮助plz?有人能告诉我你能在JSFIDLE上分享你的代码吗?在那里我们可以很容易地重构和解决它。你只能在versionchange事务中使用createIndex,也就是说,在使用更高版本打开并执行升级时使用createIndex。不能在以db.transaction()启动的事务中使用createIndex
function OnClick() {
// assumes db is a previously opened connection
var oldVersion = db.version;
db.close();
// force an upgrade to a higher version
var open = indexedDB.open(db.name, oldVersion + 1);
open.onupgradeneeded = function() {
var tx = open.transaction;
// grab a reference to the existing object store
var objectStore = tx.objectStore('todostore');
// create the index
var index = objectStore.createIndex('ixName', 'fieldName');
};
open.onsuccess = function() {
// store the new connection for future use
db = open.result;
};
}