我正在使用 Phonegap 及其 sqlite API 编写一个 Android 应用程序。现在,如果在先前的查询中满足某些条件,我想插入一条记录。例如,
tx.executeSql("SELECT * FROM T_Task WHERE is_valid=1",[], successCB, errorCB);
在successCB中,如果任务日期是今天并且今天还没有添加子任务,我想添加子任务。检查任务是否已经存在的条件是任务标题。
function successCB(tx,results){
for(var i=0; i<results.rows.length; i++){
var item=results.rows.item(i);
if(item.date==today){//'today' is defined elsewhere, globally accessible
var sql="SELECT * FROM T_SubTask WHERE title='"+item.title+"' and date='"+today+"')";
tx.executeSql(sql,[],function(tx,results){addSubTask(tx, results, item.title)},errorCB);
}
}
现在的问题是,如果有多个任务,传递的参数 item.title 将被最后一个循环覆盖。我知道我可以使用 (function(x){FUNCTION(x)})(item.title) 之类的东西来避免类似的问题。但我不知道如何在 sqlite 案例中做到这一点,我想同时传递正确的 'item.title' 和 'results' 参数。如果我使用
tx.executeSql(sql,[],function(tx,results){ (function(x){addSubTask(tx, results, x)})(item.title),errorCB);
,另一个问题是结果将是“successCB(tx, results)”的输入参数,而不是“FROM T_SubTask”查询的结果对象。
我怎样才能让这里的一切都正确?