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

时间:2015-09-21 23:13:27

标签: android sql regex sqlite android-sqlite

这可以从我的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"

1 个答案:

答案 0 :(得分:1)

问题是SQLite只会将参数绑定为字符串。 所以,是的,你的参数被绑定为“10”,而不是10。

在大多数其他数据库中你不会遇到这个问题,但SQLite会做一些奇怪的事情,这只是其中之一。

所以,我只是选择第一个表格。 如果你实际上是从输入中获取一个int参数,那么我将验证(在代码中)它是一个在预期范围内的有效int,然后只是在代码中构建sql语句,直接附加int参数,而不是绑定它