0

全部,

我将 SQL 查询存储为我的 java 应用程序的 XML 以提高可维护性。

我的部分查询需要参数化,因此我创建了可以在创建查询字符串时用值替换的标识符。

例如

WHERE CB.callback_date >= TO_DATE('$LASTDATE$','DD/MM/YYYY')
  AND CB.callback_date < TO_DATE('$FROMDATE$','DD/MM/YYYY')

我的应用程序中有一个函数可以替换这些子字符串。

public static String xmlQueryPrep(String prep)
{

    //add dates to query
    prep.replace("'$LASTDATE$'", "'20/10/2013'");
    prep.replace("'$FROMDATE$'", "'18/10/2013'");
    prep.replace("&lt;", "<").replace("&gt;", ">");
    return prep;    
}

出于某种原因,它正在替换 < 和 > 的 ASCII 代码,但它没有替换我的标记

输出

WHERE CB.callback_date >= TO_DATE('$LASTDATE$','DD/MM/YYYY')
  AND CB.callback_date < TO_DATE('$FROMDATE$','DD/MM/YYYY')

为什么不能正确更换?

4

1 回答 1

7

Strings在 Java 中是不可变的。

如果一个对象在构造后它的状态不能改变,那么它就被认为是不可变的

如果您查看文档,您将看到应用于字符串以修改其内容的每个方法都将返回一个新字符串。

你应该做 :

prep = prep.replace("'$LASTDATE$'", "'20/10/2013'");
prep = prep.replace("'$FROMDATE$'", "'18/10/2013'");
prep = prep.replace("&lt;", "<").replace("&gt;", ">");
return prep;  

甚至更好(方法链接):

return prep.replace("'$LASTDATE$'", "'20/10/2013'")
           .replace("'$FROMDATE$'", "'18/10/2013'")
           .replace("&lt;", "<")
           .replace("&gt;", ">");
于 2013-10-20T14:54:05.953 回答