有没有办法在IndexedDB中获得前一行?我找不到任何东西。
答案 0 :(得分:8)
使用游标而不是调用.continue()根本就不是黑客攻击。这是预期的方式。关于游标的要点就是它们只允许您获取所需的信息。
所以不需要调用transaction.abort()
答案 1 :(得分:1)
一个hack的排序,但我相信如果你不在结果对象上调用continue(),它将只处理第一个项目。
下面是一个使用游标查询并只处理一个结果的快速示例。
var db = _IndexedDatabase;
var trans = db.transaction(["Sites"], IDBTransaction.READ_ONLY);
var store = trans.objectStore("Sites");
var request = store.openCursor();
request.onsuccess = function (e)
{
var result = e.target.result;
if(!!result == false) { return; }
// Use result.value some how
// Comment out this line to process the first item only
//result.continue();
};
答案 2 :(得分:1)
您可以使用Transaction.abort()
例如,如果使用@ Shawn的例子
var db = _IndexedDatabase;
var trans = db.transaction(["Sites"], IDBTransaction.READ_ONLY);
trans.onabort = function(event) {
console.log(event);
};
var store = trans.objectStore("Sites");
var request = store.openCursor();
request.onsuccess = function (ev)
{
var cursor = request.result || ev.target.result;
if(!!cursor == false)
return;
console.log(cursor.value);
try{
transaction.abort();
}catch(e){
console.log(e);
}
};
答案 3 :(得分:0)
因为我找不到任何东西所以这就是我现在已经实施的东西,它对我的目的很有用。这是一个黑客,我对它不满意,但是,嘿,现在,这样做。
我只是在该数据库中存储我需要的一行。在读取时,我获取所有行并执行我需要的操作,这只是一行。当我插入一个新行时,我只是清除整个数据库,这只是一行并在其中插入一个新行。
@spiderdevil,我刚刚看到你的回答,我不确定我是否能够尝试中止交易,但如果它确实适用于其他任何人,请在评论中分享。
答案 4 :(得分:0)
只需在索引上使用Get方法即可。这将返回给定密钥的第一条记录,只有disadvatage是您无法排序。