java中實(shí)現(xiàn)控制臺(tái)打印sql語句方式
java控制臺(tái)打印sql語句
spring boot項(xiàng)目打印sql語句
首先我們看一下效果
現(xiàn)在直接上代碼:
logback-spring.xml 文件
<configuration> <!-- %m輸出的信息,%p日志級(jí)別,%t線程名,%d日期,%c類的全名,%i索引【從數(shù)字0開始遞增】,,, --> <!-- appender是configuration的子節(jié)點(diǎn),是負(fù)責(zé)寫日志的組件。 --> <!-- ConsoleAppender:把日志輸出到控制臺(tái) --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d %p (%file:%line\)- %m%n</pattern> <!-- <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level (%logger{50}:%line\) - %msg%n</pattern> --> <!-- 控制臺(tái)也要使用UTF-8,不要使用GBK,否則會(huì)中文亂碼 --> <charset>UTF-8</charset> </encoder> </appender> <!-- RollingFileAppender:滾動(dòng)記錄文件,先將日志記錄到指定文件,當(dāng)符合某個(gè)條件時(shí),將日志記錄到其他文件 --> <!-- 以下的大概意思是:1.先按日期存日志,日期變了,將前一天的日志文件名重命名為XXX%日期%索引,新的日志仍然是sys.log --> <!-- 2.如果日期沒有發(fā)生變化,但是當(dāng)前日志的文件大小超過1KB時(shí),對(duì)當(dāng)前日志進(jìn)行分割 重命名--> <appender name="commonlog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <File>E:/log/apply/commonlog.log</File> <!-- rollingPolicy:當(dāng)發(fā)生滾動(dòng)時(shí),決定 RollingFileAppender 的行為,涉及文件移動(dòng)和重命名。 --> <!-- TimeBasedRollingPolicy: 最常用的滾動(dòng)策略,它根據(jù)時(shí)間來制定滾動(dòng)策略,既負(fù)責(zé)滾動(dòng)也負(fù)責(zé)出發(fā)滾動(dòng) --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 活動(dòng)文件的名字會(huì)根據(jù)fileNamePattern的值,每隔一段時(shí)間改變一次 --> <!-- 文件名:log/sys.2017-12-05.0.log --> <fileNamePattern>E:/log/apply/commonlog.%d.%i.log</fileNamePattern> <!-- 每產(chǎn)生一個(gè)日志文件,該日志文件的保存期限為30天 --> <maxHistory>30</maxHistory> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <!-- maxFileSize:這是活動(dòng)文件的大小,默認(rèn)值是10MB,本篇設(shè)置為1KB,只是為了演示 --> <maxFileSize>5KB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <encoder> <!-- pattern節(jié)點(diǎn),用來設(shè)置日志的輸入格式 --> <pattern>%d %p (%file:%line\)- %m%n</pattern> <!-- 記錄日志的編碼 --> <charset>UTF-8</charset> <!-- 此處設(shè)置字符集 --> </encoder> </appender> <!-- RollingFileAppender:滾動(dòng)記錄文件,先將日志記錄到指定文件,當(dāng)符合某個(gè)條件時(shí),將日志記錄到其他文件 --> <!-- 以下的大概意思是:1.先按日期存日志,日期變了,將前一天的日志文件名重命名為XXX%日期%索引,新的日志仍然是sys.log --> <!-- 2.如果日期沒有發(fā)生變化,但是當(dāng)前日志的文件大小超過1KB時(shí),對(duì)當(dāng)前日志進(jìn)行分割 重命名--> <appender name="sqllog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <File>E:/log/apply/sqllog.log</File> <!-- rollingPolicy:當(dāng)發(fā)生滾動(dòng)時(shí),決定 RollingFileAppender 的行為,涉及文件移動(dòng)和重命名。 --> <!-- TimeBasedRollingPolicy: 最常用的滾動(dòng)策略,它根據(jù)時(shí)間來制定滾動(dòng)策略,既負(fù)責(zé)滾動(dòng)也負(fù)責(zé)出發(fā)滾動(dòng) --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 活動(dòng)文件的名字會(huì)根據(jù)fileNamePattern的值,每隔一段時(shí)間改變一次 --> <!-- 文件名:log/sys.2017-12-05.0.log --> <fileNamePattern>E:/log/apply/sqllog.%d.%i.log</fileNamePattern> <!-- 每產(chǎn)生一個(gè)日志文件,該日志文件的保存期限為30天 --> <maxHistory>30</maxHistory> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <!-- maxFileSize:這是活動(dòng)文件的大小,默認(rèn)值是10MB,本篇設(shè)置為1KB,只是為了演示 --> <maxFileSize>5KB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <encoder> <!-- pattern節(jié)點(diǎn),用來設(shè)置日志的輸入格式 --> <pattern>%d %p (%file:%line\)- %m%n</pattern> <!-- 記錄日志的編碼 --> <charset>UTF-8</charset> <!-- 此處設(shè)置字符集 --> </encoder> </appender> <!-- 指定項(xiàng)目中某個(gè)包,當(dāng)有日志操作行為時(shí)的日志記錄級(jí)別 --> <!-- com.appley為根包,也就是只要是發(fā)生在這個(gè)根包下面的所有日志操作行為的權(quán)限都是DEBUG --> <!-- 級(jí)別依次為【從高到低】:FATAL > ERROR > WARN > INFO > DEBUG > TRACE --> <logger name="cn.apply.mapper" level="DEBUG" additivity="false"> <appender-ref ref="sqllog" /> <appender-ref ref="STDOUT" /> </logger> <!-- 控制臺(tái)輸出日志級(jí)別 --> <root level="info"> <appender-ref ref="STDOUT" /> <appender-ref ref="commonlog" /> </root> </configuration>
application.properties 配置
#引入日志配置文件 logging.config=classpath:logback-spring.xml
運(yùn)行項(xiàng)目,調(diào)用接口看效果!
jdbc打印最終SQL語句
JDBC 獲取要執(zhí)行的SQL語句,也就是說 包括 ? 號(hào)的值:
網(wǎng)上查查了很多,都沒能成功, 最后試了一下toString 可以了:
? ? public ResultSet executeQuery(Connection conn, String sql, Object... param) ? ? ? ? ? ? throws SQLException { ? ? ? ? String sql = "SELECT * FROM categorys LIMIT ?,?"; ? ? ? ? PreparedStatement ptmt = conn.prepareStatement(sql); ? ? ? ? ptmt.setObject(1, 0); ? ? ? ? ptmt.setObject(1, 3); ? ? ? ? System.out.println(ptmt.toString());//此處打印了對(duì)象和 帶入?yún)?shù)后的sql語句 ? ? ? ? return ptmt.executeQuery(); ? ? }
打印效果如下:
com.mysql.jdbc.JDBC4PreparedStatement@14906b9: SELECT * FROM categorys LIMIT 0,3
com.mysql.jdbc.JDBC4PreparedStatement@158803f: SELECT COUNT(*) FROM categorys
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java語言實(shí)現(xiàn)簡單FTP軟件 FTP軟件本地窗口實(shí)現(xiàn)(5)
這篇文章主要為大家詳細(xì)介紹了Java語言實(shí)現(xiàn)簡單FTP軟件,F(xiàn)TP軟件本地窗口的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03解決Spring配置文件中bean的property屬性中的name出錯(cuò)問題
這篇文章主要介紹了解決Spring配置文件中bean的property屬性中的name出錯(cuò)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07Java集合類的組織結(jié)構(gòu)和繼承、實(shí)現(xiàn)關(guān)系詳解
這篇文章主要介紹了Java集合類的組織結(jié)構(gòu)和繼承、實(shí)現(xiàn)關(guān)系,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11java教程之對(duì)象序列化使用基礎(chǔ)示例詳解
所謂對(duì)象序列化就是將對(duì)象的狀態(tài)轉(zhuǎn)換成字節(jié)流,以后可以通過這些值再生成相同狀態(tài)的對(duì)象,下面詳細(xì)介紹一下java對(duì)象的序列化使用方法2014-01-01SpringBoot集成Redis及SpringCache緩存管理示例詳解
本文介紹了如何在SpringBoot中集成Redis并使用SpringCache進(jìn)行緩存管理,詳解了Redis的配置、使用以及SpringCache的注解,還闡述了SpringCache的工作原理,包括其AOP實(shí)現(xiàn)和與各種緩存框架的集成,使得開發(fā)者可以輕松實(shí)現(xiàn)緩存功能,以提高應(yīng)用性能2024-09-09