当前位置:   article > 正文

java.util.UnknownFormatConversionException: Conversion = 'Y'

java.util.unknownformatconversionexception: conversion = 'y

今天在维护一个古老的项目,该项目没有使用orm框架,使用的是原生的PreparedStatement来执行sql。由于我的sql中带有%,导致在输出日志时报错“java.util.UnknownFormatConversionException: Conversion = ‘Y’”。

java.util.UnknownFormatConversionException: Conversion = 'Y'
	at java.util.Formatter$FormatSpecifier.conversion(Formatter.java:2646) ~[na:1.7.0_80]
	at java.util.Formatter$FormatSpecifier.<init>(Formatter.java:2675) ~[na:1.7.0_80]
	at java.util.Formatter.parse(Formatter.java:2528) ~[na:1.7.0_80]
	at java.util.Formatter.format(Formatter.java:2469) ~[na:1.7.0_80]
	at java.util.Formatter.format(Formatter.java:2423) ~[na:1.7.0_80]
	at java.lang.String.format(String.java:2792) ~[na:1.7.0_80]
	at cn.firewarm.utils.basicUtils.logback.LogUtil.trace(LogUtil.java:24) ~[basicUtils-0.0.3-20170314.114237-2.jar:na]
	at cn.firewarm.report.etl.TaskDao.aggregateOutboundListData(TaskDao.java:1688) ~[classes/:na]
	at cn.firewarm.report.etl.TaskService.billDataTask(TaskService.java:70) ~[classes/:na]
	at cn.firewarm.report.etl.TaskSchedule$BillDataTask.run(TaskSchedule.java:166) ~[classes/:na]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) [na:1.7.0_80]
	at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:304) [na:1.7.0_80]
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178) [na:1.7.0_80]
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [na:1.7.0_80]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_80]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_80]
	at java.lang.Thread.run(Thread.java:745) [na:1.7.0_80]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

其实不用看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("%", “%%”));

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/173787
推荐阅读
相关标签
  

闽ICP备14008679号