我正在尝试创建一个计算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){}
答案 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)});