2014-12-11 57 views
0

我目前正在建設其使用SQLite出於某種原因,COALESE返回0而不是正確的值

function screenONEpress(tx) 
{ 
    tx.executeSql( 

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

       [screen1targetword] , errorcode 

         ); 
} 

表命名樁具有標題字,含義和頻率列的PhoneGap /科爾多瓦應用。

它的確找到了正確的價值。如果我顯示錶格的所有值,並且看不到重複的值。但是,由於某種原因,運行上面的SQL語句時,頻率始終爲1,意思是

SELECT frequency FROM PILE WHERE word = ? 

返回零。

+0

您提供** 2個**佔位符在INSERT語句(?)。你應該爲他們提供兩個**分開的值嗎?即'[screen1targetword,screen1targetword]'。假設你想在兩個地方使用'screen1targetword'。 – frank 2014-12-11 07:10:29

回答

0

正如弗蘭克所說,你有兩個參數,只給出一個值,所以第二個參數總是NULL。

要麼給兩個參數值:

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

,或者使用在這兩個地方的same parameter

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

感謝和聖誕快樂,老朋友 – 2014-12-11 22:03:33

0

如果你這樣寫查詢會發生什麼?

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

這應該是相同的邏輯,但你可以直接測試select以確保它返回正確的值。

相關問題