2011-11-04 53 views
4

SQLiteDatabase中的參數raw query函數綁定爲字符串,它對我造成問題。如何在SQLiteDatabase原始查詢綁定中設置數據類型?

實施例的查詢(結合):

SELECT ? < 68 

回報:0

SELECT min(?, 68) 

回報:68

這樣的結果是因爲50綁定爲字符串和查詢看起來像SELECT '50' < 68 ;它返回false

經過在運行時創建的複雜查詢,我必須使用SQLiteDatabase.rawQuery

如何將數據綁定爲整數

我找到了一個解決方案:

SELECT CAST(? AS INTEGER) < 68 ; 

但它看起來醜陋。有沒有其他方法?我在Android API中找不到任何適當的方法。

+0

SQLiteDatabase.execSQL(sql,args)聲明的唯一字節[],String,Long和Double的javadoc在bindArgs中受支持。它有助於使用「長」而不是「整數」?一些代碼也減少了猜測:) –

+0

Javadoc for'SQLiteDatabase.execSQL(sql,args)'說:'執行不是SELECT/INSERT/UPDATE/DELETE'的單個SQL語句。我需要SELECT。但問題在於使用不同於'String'的類型,不僅是Integer或Long。 – pawelzieba

+0

哎呀,對不起,你是對的 - 它在全部大寫的第一句中都這麼說:( –

回答

2

我意識到現在這是一個老問題,但是您應該使用compileStatement,然後在生成的SQLiteProgram類上使用bindLong。這是谷歌給予人們足夠聰明的方式,使用SQL額外的推動來編譯語句以獲得更好的性能。

+0

我會看看,但對於非常複雜的查詢來說,它似乎很難甚至不可能使用。 – pawelzieba