从我的Android
SQLite
数据库返回所有长度大于10个字符的字符串:
cursor = database.query(TABLE_NAME, mColumns, "length(word) > 10",
null, null, null, null);
为什么这个不返回什么呢?
cursor = database.query(TABLE_NAME, mColumns, "length(word) > ?",
new String[]{"10"}, null, null, null);
第四个参数将where
中的每个?
定义为String
数组的一个元素,因此?
应由字符串"10"
替换。
问题是SQLite只将参数绑定为string。所以,是的,你的参数被绑定为"10",而不是10。
在大多数其他数据库中你不会有这个问题,但是SQLite做了一些奇怪的事情,这只是其中之一。
所以,我就用第一种形式。如果你实际上从输入中获得一个int形参,那么我将(在代码中)验证它在预期范围内是一个有效的int形参,然后只需在代码中构建sql语句,直接附加int形参,而不是绑定它。