由于某种原因,COALESE返回0而不是正确的值

时间:2014-12-11 01:01:31

标签: javascript sql database sqlite cordova

我目前正在构建一个使用SQLite的PhoneGap / Cordova应用程序

function screenONEpress(tx) 
{
    tx.executeSql(   

    "INSERT OR REPLACE INTO PILE (word, frequency) 
     VALUES ( ?,   COALESCE( (SELECT frequency FROM PILE WHERE word = ?), 0) + 1  )",

                [screen1targetword] , errorcode

                        );
}

名为PILE的表格包含标题为Word,Meaning和Frequency的列。

确实找到了合适的价值。如果我显示表的所有值,我看不到重复的值。但是,出于某种原因,在运行上面的SQL语句时,频率始终为1,表示

SELECT frequency FROM PILE WHERE word = ? 

返回零。

2 个答案:

答案 0 :(得分:0)

如果您像这样编写查询会怎样?

INSERT OR REPLACE INTO PILE (word, frequency) 
     SELECT ?,  COALESCE(MAX(frequency), 0) + 1, [screen1targetword] , errorcode
     FROM pile
     WHERE word = ?;

这应该是相同的逻辑,但您可以直接测试select以确保它返回正确的值。

答案 1 :(得分:0)

正如frank所说,你有两个参数,只给一个值,所以第二个参数总是NULL。

提供两个参数值:

tx.executeSql("... ? ... ? ...",
              [screen1targetword, screen1targetword], ...);

或在两个地方使用same parameter

tx.executeSql("... ?1 ... ?1 ...",
              [screen1targetword], ...);