4

我知道来自 web sql 的结果集不是一个数组,更像是一个对象?我正在循环浏览一个结果集并加快速度,一旦找到它,我想删除一行。我试过“删除”和“拼接”,前者什么都不做,后者抛出一个错误。这是我正在尝试做的一部分,请注意第 18 行的删除:

function selectFromReverse(reverseRay,suggRay){
    var reverseString = reverseRay.toString();
    db.transaction(function (tx) {  
        tx.executeSql('SELECT votecount, comboid FROM counterCombos WHERE comboid IN ('+reverseString+') AND votecount>0', [], function(tx, results){
            processSelectFromReverse(results,suggRay);
        }); 
    }, function(){onError});
}

function processSelectFromReverse(results,suggRay){
    var i = suggRay.length;
    while(i--){
        var j = results.rows.length;
        while(j--){
            console.log('searching');
            var found = 0;
            if(suggRay[i].reverse == results.rows.item(j).comboid){
                delete results.rows.item(j);
                console.log('found');
                found++;
                break;
            }
        }       
        if(found == 0){
            console.log('lost');
        }
    }
}
4

3 回答 3

8

实际上,您使用 DELETE sql 命令从数据库中删除记录。例如:

tx.executeSql('DELETE FROM counterCombos WHERE comboid = ?', [comboid], success, error);

processSelectFromReverse可以修改为包括tx作为输入

processSelectFromReverse(results,suggRay,tx) 
于 2012-10-01T23:14:24.030 回答
0

Web SQL 已经从 HTML5 处理中删除了将近 2 年,并且不受支持。Web StorageIndexed DB已取而代之。

您删除对象的语法:delete object;是正确的。它在 JavaScript 中不经常使用,但我已经使用过它,这是正确的用法。

使用 web-storage(通常称为本地存储),您将实例化一个localStorage带有 method 的对象,该对象removeItem(item key)已经内置。

您可以在上面的 webstorage 链接中查看更多信息,或前往此处查看教程

于 2012-10-01T15:54:15.260 回答
0

如果您关心的是 IOS 或 Android,则制作一个原生包装的应用程序将允许您创建一个 javascript 界面。通过这个界面,您可以访问(对于 android)sqlite 并创建一个不错的、可查询的解决方案。缺点是这需要人们下载您的应用程序而不是访问站点。

http://caniuse.com/indexeddb

indexeddb 支持的增长相当缓慢。使用适当的编码风格,您可能会以相当可观的速度使用本地存储(如上述评论中所述)。

于 2013-09-09T16:11:04.737 回答