使用p6spy和sqlprofiler查看执行sql

在公司使用ibaits做持久层存储。虽然ibatis是半自动的,可以编写sql,但是跟一大堆的xml放在一起看起来很不直观。之前虽然可以配置log4j可以打印执行的sql,但是输出的只是预编译的,其中充斥着?,传入的参数不能能直观的检查。在测试的时候往往想查看执行的sql到底是什么,这样对于定位错误非常有用。在网上找到两个工具包来解决这个问题:p6spysql_profiler

访问链接如下:

P6spy: http://www.p6spy.com/

Sqlprofiler:http://www.jahia.org/jahia/page377.html(打不开,难道要CROSS WALL--shit,敏感词汇)

大致原理sqlprofiler其主要作用就是对数据库进行拦截监控,P6Spy 就是一个代理它只做了一层对 JDBC 驱动的拦截,然后转发出去。它用log4j来记录操作日志。

下载p6spy-install.zip解压缩后的目录文件如下图:
        使用p6spy和sqlprofiler查看执行sql_第1张图片

使用方法:

目前p6spy的版本为1.3,在项目中增加依赖:

    <dependency>

                <groupId>p6spy</groupId>

                <artifactId>p6spy</artifactId>

                <version>1.3</version>

            </dependency>

目录中有一个spy.properties配置文件,将其放置到classpath下,该文件详细的配置了p6spy]的运行参数。前面提到p6spy的代理机制,所以我们需要使用它提供的驱动(其他的数据库连接URL什么的无需修改)

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" >

        <property name="driverClassName">

            <value>com.p6spy.engine.spy.P6SpyDriver</value>

        </property>

        <property name="url">XXX </property>

        <property name="username">XXX </property>

        <property name="password">XXX</property>

    </bean>

spy.properties文件中配置我们实际使用的数据库驱动:

# oracle driver

# realdriver=oracle.jdbc.driver.OracleDriver

# mysql Connector/J driver

# realdriver=com.mysql.jdbc.Driver

# informix driver

# realdriver=com.informix.jdbc.IfxDriver

# ibm db2 driver

# realdriver=COM.ibm.db2.jdbc.net.DB2Driver

# the mysql open source driver

#realdriver=org.gjt.mm.mysql.Driver

其中还有一个logfile属性可以配置日志文件输出的位置。

通过运行单元测试,的确在相应目录下生成了sql日志,但查看后发现该日志的可读性很差。所以使用sqlprofiler图形界面查看。

下载下来的sqlprofiler-0.3-bin的目录结构如图:


    使用p6spy和sqlprofiler查看执行sql_第2张图片
  

我们使用sqlprofilerGUI控制介面,说白了就是一个监听器,在你通过p6spy进行数据库操作时,他就会很清晰地跟踪并列出你的操作,比单单查看那个恶心的spy.log来得舒服!既然基于p6syp当然也要用到p6syp.jar这个包咯,只是必须使用我们下载到的sqlprofiler.zip中的spy.properties来替换原来的项目中的那个文件,因为这个文件是定制过的,所谓的监听器也是靠这个文件才起作用的。同样的需要配置相关参数,修改realDriverlogfile的配置。

运行sqlprofiler.jar并执行测试,可以看到图形界面效果如下:


使用p6spy和sqlprofiler查看执行sql_第3张图片
 


 

你可能感兴趣的:(oracle,sql,mysql,jdbc,db2)