java.util.UnknownFormatConversionException: Conversion = ''';

今天在测试一个新的项目,在执行sql查询报表的时候。由于我的sql中带有%,导致在输出日志时报错“java.util.UnknownFormatConversionException: Conversion = '''。
经过分析发现:Java中如何让String.format正常处理%

1,代码示例:

System.out.println(String.format("where  name like % %s","Zhang san"));,

2,执行时报错:

java.util.IllegalFormatFlagsException

3,解决办法1:

使用%%对%进行转义

代码示例:

System.out.println(String.format("where  name like %% %s","Zhang san"));

正确执行时的输出结果:

where  name like % Zhang san

解决办法2:

System.out.println(String.format("where  name like %s %s","%","Zhang san"));

正确执行时的输出结果:

where  name like % Zhang san

 

其实不用看Conversion = ‘Y’,什么Conversion = ‘I’,Conversion = ‘F’ … 都是这个错误造成的。

第一次遇到这个错误,有点蒙,还查了很久,最后发现是:在格式化输出时,输出字符串的内容不能含有%。如果要输出%,必须进行转义,也就是使用%%代替%

但是我又不能直接修改sql,所以我采用的方式是在输出日志时把%替换成%%

举例:
我的sql是:String sql=“SELECT DATE_FORMAT(date(now()), ‘%Y%m%d%H%i’) AS time_id”

我的日志输出则应该是:Logutil.trace(“我是日志:”+sql.replace("%", “%%”));

解决办法其实很简单,这也是怪我基础知识不扎实,故记之,以后万万不可犯同样的错误。

 

 

posted @   张亮java  阅读(28646)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
历史上的今天:
2016-03-29 JSP里比对单选框或复选框的数值而自动打勾
2016-03-29 checkbox的相关知识点
2016-03-29 firefox中 checkbox属性checked="checked"已有,但复选框却不显示打钩的原因
点击右上角即可分享
微信分享提示