Android 如何在SQLiteDatabase原始查询绑定中设置数据类型?
SQLiteDatabase函数中的参数被绑定为字符串,这会给我带来问题 查询示例(绑定50): 返回:Android 如何在SQLiteDatabase原始查询绑定中设置数据类型?,android,sql,sqlite,casting,Android,Sql,Sqlite,Casting,SQLiteDatabase函数中的参数被绑定为字符串,这会给我带来问题 查询示例(绑定50): 返回:68 这样的结果是因为50被绑定为字符串,查询看起来像SELECT'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 forSQLiteDatabase.execSQL(sql,args)
说:执行一条不是SELECT/INSERT/UPDATE/DELETE的sql语句。我需要选择。但是问题在于使用任何不同于String
的类型,而不仅仅是Integer或Long。正如您所指出的,execSQL支持不同的类型,但不支持rawQuery。奇怪。我会看一看,但它似乎很难甚至不可能用于非常复杂的查询。
SELECT min(?, 68)
SELECT CAST( ? AS INTEGER ) < 68 ;