请看之前引起占位符失效的代码
List<String> gg2dmlist=new ArrayList<>();
gg2dmlist.add("S");
gg2dmlist.add("M");
StringBuffer initemBuffer=new StringBuffer();
for(String gg2dm:gg2dmlist){
initemBuffer.append("'"+gg2dm+"',");
}
String initems=initemBuffer.toString(),inSql=MessageFormat.format(
"select spdm from spkcb where ckdm='{0}' and sl>0 and gg2dm in ({1})",
"SD001",initems.substring(0, initems.length()-1));
System.out.println(inSql);
运行结果:??
select spdm from spkcb where ckdm={0} and sl>0 and gg2dm in ('S','M')
?其中 ckdm={0},本意是想ckdm='SD001',结果却失效
修复后的代码为:
List<String> gg2dmlist = new ArrayList<>();
gg2dmlist.add("S");
gg2dmlist.add("M");
StringBuffer initemBuffer = new StringBuffer();
for (String gg2dm : gg2dmlist) {
initemBuffer.append("'" + gg2dm + "',");
}
String initems = initemBuffer.toString(), inSql = MessageFormat.format(
"select spdm from spkcb where ckdm=''{0}'' and sl>0 and gg2dm in ({1})",
"SD001", initems.substring(0, initems.length() - 1));
System.out.println(inSql);
?运行结果:
select spdm from spkcb where ckdm='SD001' and sl>0 and gg2dm in ('S','M')
?仅仅需要将占位符前后的单引号前再加一个单引号