Android SQLite 不使用通配符代替 10 处理"where length(word) > 10"



从我的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形参,而不是绑定它。

最新更新