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

29 篇文章 2 订阅

今天在修改一个很古老项目的时候,有一个需求就是要在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注入问题,要避免这样写。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值