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

Javascript 出于某种原因,COALESE返回0而不是正确的值,javascript,sql,database,sqlite,cordova,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 )", [s

我目前正在构建一个使用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、means和Frequency的列

它确实找到了正确的值。如果我显示表中的所有值,并且没有看到重复的值。但是,由于某种原因,在运行上面的SQL语句时,频率总是变为1,这意味着

SELECT frequency FROM PILE WHERE word = ? 

返回零

如果这样编写查询会发生什么

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

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

正如frank所指出的,您有两个参数,并且只给出一个值,因此第二个参数始终为空

要么给出两个参数值:

tx.executeSql("... ? ... ? ...",
              [screen1targetword, screen1targetword], ...);
或在两个位置使用:

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

您在insert stmt中提供了两个占位符(?)。你不应该为他们提供两个不同的值吗??i、 e
[Screen1TargetWorld,Screen1TargetWorld]
。假设你想在这两个地方都有
screen1targetword
。谢谢,圣诞快乐,老朋友