我目前正在构建一个使用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 = ?
返回零。
答案 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], ...);