我想要做一個JS函數來計算SQLite表中的行。JS函數來統計SQLite表中的行
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"
上面的例子返回 「不確定」,而平行的例子正常工作:
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){}
你和丹尼爾的建議是非常有幫助的,但他們不解決我的問題。我看到使用回調函數可以在代碼中的任何地方執行函數,但這不是我想要做的。我想把值賦給一個變量,這樣我就可以計算兩個表中的行數,然後將結果放在兩個不同的變量中,然後使用if語句比較結果:if([NoOfRowsIn1stTable]> [NoOfRowsIn2ndTable]){ }。 – lukeshek 2012-03-22 15:03:17
爲什麼不使用名爲tblname的全局函數,並在調用countRows()之前做一個tblName =「table1」; countRows(function(num){alert(num)}); tblName = 「表2」; countRows(function(num){alert(num)});在tx.executeSql裏面是:tx.executeSql('SELECT id FROM'+ tblName,[],function(tx,results) – Panagiotis 2012-03-22 15:25:44
這是一個小小的醜陋解決方案,但它實現起來很簡單,Idea想通過「查詢函數」對於每個查詢期望的最後一個,最後一個傳遞一個函數,它將比較先前查詢的結果。這樣你就知道當執行一個查詢時,前一個查詢就完成了:countRowsTbl1(callRowBurstAllExecuted)); – Ivan 2012-03-22 16:02:22