JS函数计算SQLite表中的行数

时间:2012-03-22 14:13:04

标签: javascript sqlite

我正在尝试创建一个计算SQLite表中行数的JS函数。

function countRows(){
    db.transaction(function (tx){
        tx.executeSql('SELECT id FROM table', [], function (tx, results) {
            var len = results.rows.length;
            alert(len);
        });
    });
}

上面的代码显示了表格中包含行数的警报。但是,我想创建一个能够返回数字而不是显示警告框的函数。

我试过了:

function countRows(){
    db.transaction(function (tx){
        tx.executeSql('SELECT id FROM table', [], function (tx, results) {
            var len = results.rows.length;
            return len;
        });
    });
}

然后:

var number = countRows();
alert (number); // returns "undefined"

上面的示例返回“undefined”,而并行示例可以正常工作:

function count(){
    return 3;
}
var number = count();
alert (number); // returns 3

我想将数字分配给变量,这样我就可以进行另一个SQL查询,计算另一个表中的行,并比较两个结果。

在PHP中,这将是:

$sql1 = mysql_query('SELECT COUNT(*) FROM table1');
$rows1 = mysql_result($sql1, 0);
$sql2 = mysql_query('SELECT COUNT(*) FROM table2');
$rows2 = mysql_result($sql2, 0);
if ($row1>$row2){}

2 个答案:

答案 0 :(得分:2)

通过更改您的查询,您将获得更好的服务。

SELECT COUNT(ID) FROM table

另外,它是一个异步调用,以便调用return返回回调函数。你应该传递自己的回调函数。

function countRows(callback){
    db.transaction(function (tx){
        tx.executeSql('SELECT id FROM table', [], function (tx, results) {
            var len = results.rows.length;
            callback(len);
        });
    });
}

答案 1 :(得分:2)

db.transaction是异步的。返回值未分配给上面代码中的任何变量。解决方案是传递回调或创建自定义事件,这几乎是相同的。

这样的事情:

function countRows(cb){
    db.transaction(function (tx){
        tx.executeSql('SELECT id FROM table', [], function (tx, results) {
            var len = results.rows.length;
            cb.call(this, len);
        });
    });
}

countRows(function (num) {alert(num)});