Android 如何在SQLiteDatabase原始查询绑定中设置数据类型?

Android 如何在SQLiteDatabase原始查询绑定中设置数据类型?,android,sql,sqlite,casting,Android,Sql,Sqlite,Casting,SQLiteDatabase函数中的参数被绑定为字符串,这会给我带来问题 查询示例(绑定50): 返回:68 这样的结果是因为50被绑定为字符串,查询看起来像SELECT'50'

SQLiteDatabase函数中的参数被绑定为字符串,这会给我带来问题

查询示例(绑定50):

返回:
68

这样的结果是因为
50
被绑定为字符串,查询看起来像
SELECT'50'<68
返回
false

在运行时创建复杂的查询后,我必须使用
SQLiteDatabase.rawQuery

如何将数据绑定为整数

我找到了一个解决方案:

SELECT CAST( ? AS INTEGER ) < 68 ;
选择CAST(?AS INTEGER)<68;

但它看起来很丑。还有别的办法吗?我在Android API中找不到任何合适的方法。

我现在意识到这是一个老问题,但您应该在生成的SQLiteProgram类上使用compileStatement后跟。这是谷歌让足够聪明的人使用SQL来编译语句以获得更好性能的方法。

SQLiteDatabase的javadoc.execSQL(SQL,args)声称“bindArgs中只支持byte[],String,Long和Double”。使用
而不是
整数
有帮助吗?一些代码也减少了猜测:)Javadoc for
SQLiteDatabase.execSQL(sql,args)
说:
执行一条不是SELECT/INSERT/UPDATE/DELETE的sql语句。我需要选择。但是问题在于使用任何不同于
String
的类型,而不仅仅是Integer或Long。正如您所指出的,execSQL支持不同的类型,但不支持rawQuery。奇怪。我会看一看,但它似乎很难甚至不可能用于非常复杂的查询。
    SELECT min(?, 68)
SELECT CAST( ? AS INTEGER ) < 68 ;