java - 如何在 JCR SQL2 查询中转义动态生成的字符串值?

标签 java jackrabbit jcr jcr-sql2

假设我有一个 JCR 2 查询字符串,它是这样构成的:

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

是否有我可以用来转义 aValue 的辅助方法?

顺便说一下,我已经知道在 SQL2 中我们可以使用占位符进行查询并让框架为我们转义值,但是如果我要动态创建此查询,我如何转义 aValue 以防止 SQL 注入(inject)以及构建损坏的查询?

最佳答案

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

至于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 中相同)。路径 查询目前不支持占位符。

关于java - 如何在 JCR SQL2 查询中转义动态生成的字符串值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27239837/

相关文章:

java - maven-jar-plugin 不生成 MANIFEST

java - 在 Java GUI 中绘制图像

java - 当 Jackrabbit 是全局交易的一部分时,我该如何使用它?

java - 避免在 Eclipselink 中实例化 IndirectList

java - 如何在 Felix 请求过滤器中获取当前 Jackrabbit 用户?

java - Jackrabbit-oak 构建因 mvn clean install 失败

Java JCR : Correspondance between parent and child node versions

java - 将 LoginContext 作为 JCR 中存储库登录的凭证传递(java 内容存储库)

java - JCR按路径查询

java - Fitness.API 在 Google Play Services 7.0 中被移除了吗?