正如Android文檔所述,rawQuery方法的selectionArgs參數被解析爲字符串。SQLite rawQuery selectionArgs和Integers字段
SQLiteDatabase.rawQuery(字符串SQL,字符串[] selectionArgs兩個)
selectionArgs兩個:您可能包括s-在查詢中, 將由從selectionArgs兩個的值來替換條款?。 這些值將被綁定爲字符串。
但今天,我面臨着一個我的一天中很大一部分的問題。設想以下查詢:
SELECT * FROM TABLE_A WHERE IFNULL(COLUMN_A, 0) >= 15
COLUMN_A是INTEGER。該表格大約有10行符合該標準。在數據庫編輯器上運行查詢,結果始終正確,但在智能手機上,該語句始終沒有返回任何行。
一段時間後,一改查詢:
SELECT * FROM TABLE_A WHERE IFNULL(COLUMN_A, 0) >= '15'
和編輯器返回行,就像Android系統。因此,更改查詢爲:
SELECT * FROM TABLE_A WHERE CAST(IFNULL(COLUMN_A, 0) as INTEGER) >= '15'
解決了這個問題。另一個測試是:
SELECT * FROM TABLE_A WHERE COLUMN_A >= '15'
也,返回正確的結果。
這似乎是一個問題,涉及到Android將參數綁定到查詢(以字符串形式)與IFNULL子句的方式。
那麼,有誰知道這是爲什麼發生?有沒有任何建議來解決這個問題,而不使用CAST?
我有類似的問題,我花了一個小時試圖找到我的應用程序中的錯誤。然後我找到了你的帖子。因此,你寫在這裏真的很棒。另一件事是我永遠不會理解Android哲學,爲什麼這個CAST是必須在這裏... – user2707175