【发布时间】:2013-10-20 14:52:57
【问题描述】:
全部,
我将 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("<", "<").replace(">", ">");
return prep;
}
由于某种原因,它正在替换 的 ASCII 代码,但它没有替换我的标记
输出
WHERE CB.callback_date >= TO_DATE('$LASTDATE$','DD/MM/YYYY')
AND CB.callback_date < TO_DATE('$FROMDATE$','DD/MM/YYYY')
为什么不能正确替换?
【问题讨论】:
-
看起来您正在使用字符串操作来构建 SQL。你知道这个想法有多糟糕吗?如果您可以使用参数化的准备查询或(正确设计的)命名查询,您将避免很多麻烦! (请注意,这是真的独立于您使用什么语言来准备查询。)