如何在JCR SQL2查询中转义动态生成的String值?

时间:2014-12-02 00:23:09

标签: java jackrabbit jcr jcr-sql2

让我假装我有一个JCR 2查询字符串,如下所示:

String sql2Query = "SELECT * FROM [cq:PageContent] " +
                   "WHERE [aProperty] <> \" + aValue + "\"";

是否有帮助方法可以逃脱aValue

顺便说一句,我已经知道在SQL2中我们可以使用占位符进行查询,让框架为我们处理值的转义,但如果我要动态创建这个查询,我该如何逃避{{1}阻止SQL注入以及构建破坏的查询?

2 个答案:

答案 0 :(得分:7)

是的,您可以使用占位符。即使是动态创建的查询也可以使 占位符。

对于SQL-2,您需要使用单引号,而不是双引号。例如:

SELECT * FROM [cq:PageContent]
WHERE [aProperty] <> 'Joe''s Taxi'

您只需要使用单引号转义来转义单引号 字符:

String aValue = "Joe's Taxi";
String sql2Query = "SELECT * FROM [cq:PageContent] " +
    "WHERE [aProperty] <> '" + aValue.replaceAll("'", "''") + "'";

如果要使用XPath,可以使用单引号或双引号,但是 通常使用单引号(与SQL-2中相同)。 XPath的 查询目前不支持占位符。

答案 1 :(得分:0)

显然org.apache.jackrabbit.util.TextescapeIllegalJcrChars。这会有帮助吗?

更多信息: https://jackrabbit.apache.org/api/1.4/org/apache/jackrabbit/util/Text.html