android - 在Phonegap SQLite中根据之前的查询结果进行查询

标签 android sqlite parameters cordova

我正在使用 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”查询的结果对象。

我怎样才能使这里的一切正确?

最佳答案

results 的问题可以通过在“FROM T_SubTask”查询中将参数名称更改为匿名成功函数轻松解决。

至于 item 变量,您应该能够将 if block 中的代码移动到一个单独的函数中。像这样的东西:

function addSubtaskIfNeeded(item, tx) {
  var sql="SELECT * FROM T_SubTask WHERE title='"+item.title+"' and date='"+today+"')";
  tx.executeSql(sql,[],function(tx,subresults){addSubTask(tx, subresults, item.title)},errorCB);
}

注意,上面的 results 变量也被重命名为 subresults。然后更改 if block 中的代码以调用该函数:

if (item.date == today) {
  addSubtaskIfNeeded(item, tx);
}

这样,addSubtaskIfNeeded 查询回调函数中的 item 变量将作为参数传递给该函数。

关于android - 在Phonegap SQLite中根据之前的查询结果进行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18530880/

相关文章:

android - 如何列出android目录中的文件?

带工具栏的 Android BaseActivity - setSupportActionBar() 未知

java - 无法在 Java Android 中按单个 HashMap 对象字段对 ArrayList<HashMap<String, Object>> 进行排序

database - SQLite3 的动态类型

c - 关于 struct 数组作为 gcc 和 vc 编译的参数

grails - 如何在 grails Controller 中使用路径变量?

java - Android更改目标sdk

c++ - SQLite 无法在 Win98 中打开数据库

sqlite更新查询报错

java - 启动JVM时的-Xms和-Xmx参数是什么?