如何从IndexedDB获得前1行

时间:2012-01-06 23:36:23

标签: indexeddb

有没有办法在IndexedDB中获得前一行?我找不到任何东西。

5 个答案:

答案 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是您无法排序。