2011-11-04 52 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