在Android SQLite中无法使用带有参数和%字符的Like语句

5

错误原因:java.lang.IllegalArgumentException: 无法绑定参数1,因为索引超出范围。该语句没有参数。

Android不识别?字符中的?%

我尝试实现以下内容:

 String selectQuery = "SELECT * FROM config WHERE Directory Like '?%';";

 SQLiteDatabase db = this.getReadableDatabase();
 Cursor cursor = db.rawQuery(selectQuery, new String[] {parent});

我已经尝试寻找解决方案,但没有找到任何有用的内容。我认为这个问题是非常特殊的。我想这样做是因为我希望查询可以使用包含字符'的字符串。

也许有遇到相同问题的人可以回答我,如何解决这个问题。

3个回答

8

使用||来连接参数和通配符:

SELECT * FROM config WHERE Directory Like ? || '%';

仍然不起作用 :( 相同的错误 "SELECT * FROM config WHERE Directory Like '?' || '%';" - Marian Pavel
@PavelMarian 尝试一下不加 ' - Lukasz Szozda
1
运行得很好,将在时间限制后接受答案。我不知道我可以连接字符串。 - Marian Pavel

0
SELECT * FROM config WHERE Directory Like '?' || '%';

SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(selectQuery, new String[] {parent});

使用 || 可以解决这个问题


-2

您可以将您的条件放入一个String变量中,然后将其传递给查询,像这样--> String Condition = "'?"; SELECT * FROM config WHERE Directory Like '"+Condition+"'


1
不要允许 SQL 注入攻击。 - Lukasz Szozda
@lad2025:有很多方法可以防止SQL注入攻击。 - karimkhan
2
第一条规则是:避免构建自定义字符串,而使用参数绑定。 - Lukasz Szozda
@lad2025:有时候你需要用另一种方式完成工作,但这并不意味着你犯了错误,只是你比较灵活。 - karimkhan
1
一个好笑的玩笑,暴露了 SQL 攻击注入的灵活性。 - Lukasz Szozda
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接