首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

Hibernate 展示完整SQL语句

2012-09-02 
Hibernate 显示完整SQL语句使用hibernate时,想显示sql语句,可以设置show_sql为true来达到这个目的,但是参

Hibernate 显示完整SQL语句

使用hibernate时,想显示sql语句,可以设置show_sql为true来达到这个目的,但是参数值全是像PreparedStatement一样,用?来代替的。
用p6spy可以达到显示的那些参数原值的目的,但可读性差。可以利用SQL Profiler来处理这个事情。
p6spy: http://www.p6spy.com
SQL Profile:http://sourceforge.net/projects/sqlprofiler/

一、下载p6spy-install.zip

? ? 官方:http://www.p6spy.com/

? ? 解压:p6spy-install.zip,

? ? 把根目录下的p7spy.jar 复制到 WEB-INF\lib\下,

? ? spy.properties 复制到 WEB-INF\classes\下

二、修改spy.properties文件

? ? 开启42行

? ? # oracle driver
? ? realdriver=oracle.jdbc.driver.OracleDriver

? ? 关闭54行? ? ?
? ? # the mysql open source driver
? ? #realdriver=org.gjt.mm.mysql.Driver

? ? 修改168行,日志存放位置

? ? logfile = c:/spy.log

三、修改spring配置文件

<bean id="loadPropertiesConfigure" >
? <constructor-arg>
? <ref local="proxoolDataSource"/>
? </constructor-arg>
?</bean>
? <!-- 定义Hibernate的一个sessionFactory -->
? <bean id="sessionFactory" scope="singleton">
? <property name="dataSource">
? <!-- <ref bean="proxoolDataSource"/> -->
? <ref bean="dataSource"/> ?
? </property>

?重启应用后,打开spy.log看看,看里面的日志是不是看起来比较不爽?下面我们安装SQL Profiler来让自已的视线爽一点。


解压sqlprofiler-0.3-bin.zip,把spy.properties拷贝到项目中,覆盖之前的spy.properties,要改的也只是realdriver,可以看到配置文件中有log4j,这就需要我们吧log4j的jar拷贝到应用中。

sqlprofiler.jar并不需要拷贝到应用中,他需要我们来执行:
java -Xmx256m -jar sqlprofiler.jar



spy.properties片断:
log4j.appender.SQLPROFILER_CLIENT=org.apache.log4j.net.SocketAppender
log4j.appender.SQLPROFILER_CLIENT.RemoteHost=localhost
log4j.appender.SQLPROFILER_CLIENT.Port=4445
log4j.appender.SQLPROFILER_CLIENT.LocationInfo=true

p6spy 通过SocketAppender 向sqlprofiler发送日志信息,sqlprofiler启动后就开始监听本机的4445端口,在应用中执行数据库操作后就可以在sqlprofiler的界面中看到sql语句的执行结果。

最后一个需要注意的问题就是需要先启动 SQLProfiler,此时状态栏显示P6SPY为未连接状态,然后再启动应用程序或者 Tomcat 等应用服务器,应用运行后SQLProfiler状态栏就会变为连接状态。这是因为 SQLProfiler 默认使用的是 Log4j 的 SocketAppender,所以要先启动。否则,会因你的应用程序或应用服务器中的 Web 应用之类的因连接不到 Socket 的服务器(SQLProfiler 相当于 Socket 的服务器)而发生错误,可以通过 SQL Profiler 控制界面最下面的连接状态就可以知道是否有程序连接上来。

热点排行