java使用sql语句中使用like来传参数出现java.util.UnknownFormatConversionException:Conversion=

今天在修改一个很古老项目的时候,有一个需求就是要在sql查询里使用like来传递参数,进行模糊查询。

如下所示:

 sql_Static_person = String.format(
      "select * from t_info where HD='%s' and (GG='%s' or GG is null) 
and BS<=1 and ZH='%s' and flag=0 and bz like %s ",aa(), bb(), cc(),dd());

其实需求很简单,就是把dd()的参数值直接传到bz like 后的%s里,尝试里很多办法,一开始使用concat进行连接,发现总是出现

Conversion = '''的错误,java.util.UnknownFormatConversionException:Conversion=''';

 sql_Static_person = String.format(
      "select * from t_info where HD='%s' and (GG='%s' or GG is null) 
and BS<=1 and ZH='%s' and flag=0 and bz like concat('%',%s,'%') ",aa(), bb(), cc(),dd());

看着报错,应该是数据格式的问题,于是又想到里转义,如下所示:

 sql_Static_person = String.format(
      "select * from t_info where HD='%s' and (GG='%s' or GG is null) 
and BS<=1 and ZH='%s' and flag=0 and bz like concat(\'%\',%s,\'%\') ",aa(), bb(), cc(),dd());

很遗憾还是出现同样的错误,于是突然想到String.format处理%的转义应该不是这种形式,应该是%% 对% 进行转义,于是如下所示:

 sql_Static_person = String.format(
      "select * from t_info where HD='%s' and (GG='%s' or GG is null) 
and BS<=1 and ZH='%s' and flag=0 and bz like '%%%s%%' ",aa(), bb(), cc(),dd());

代码成功运行,说明一点,java基础忘记差不多了。。。

 

还有一点,奉劝不要这么在代码里写SQL,如果暴露的互联网上,且存在安全信息,就会存在SQL注入问题,要避免这样写。

 

你可能感兴趣的:(Java,SQL)