所有
我将SQL查询存储为我的java应用程序的XML,以提高可维护性。
我的部分查询需要参数化,因此我在创建查询字符串时创建了可用于替换值的标识符。
e.g。
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("<", "<").replace(">", ">");
return prep;
}
由于某种原因,它正在替换&lt;和&gt;但它并没有取代我的标记
输出
WHERE CB.callback_date >= TO_DATE('$LASTDATE$','DD/MM/YYYY')
AND CB.callback_date < TO_DATE('$FROMDATE$','DD/MM/YYYY')
为什么不能正确更换?
答案 0 :(得分:7)
Strings
是immutables。
如果一个对象的状态在其后不能改变,则该对象被认为是不可变的 构建
如果您查看documentation,您会看到应用于String以修改其内容的每个方法都将返回一个新的String。
你应该这样做:
prep = prep.replace("'$LASTDATE$'", "'20/10/2013'");
prep = prep.replace("'$FROMDATE$'", "'18/10/2013'");
prep = prep.replace("<", "<").replace(">", ">");
return prep;
甚至更好(method chaining):
return prep.replace("'$LASTDATE$'", "'20/10/2013'")
.replace("'$FROMDATE$'", "'18/10/2013'")
.replace("<", "<")
.replace(">", ">");