今天在測試一個新的項目,在執行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("%", “%%”));
解決辦法其實很簡單,這也是怪我基礎知識不扎實,故記之,以后萬萬不可犯同樣的錯誤。