p6spy是个很好的第三方工具,可以帮我们调试SQL性能,也可以把SQL语句中的问号都替换为参数,让我们一目了然知道用的是什么SQL语句操作的数据库,这样我们可以把这些SQL语句直接COPY到SQL*Plus或者TOAD中运行。不过今天我却遇到了一个问题。
我进行了一个检索,检索条件不很复杂,没有自查询,只有外关联。类似于这样的语句。
SELECT
A.FIELD1, A.FIELD2, A.FIELD3,
B.FIELD1, B.FIELD2, B.FIELD3,
C.FIELD1, C.FIELD2
FROM
TBL_A A, TBL_B B, TBL_C C
WHERE ……
用SQL*PLUS直接对数据库进行检索,一共检索出2条结果,其中B的FIELD都是空的,A和C表中都是有值的。接着用Oracle的JDBC直接连接,检索出来的也和SQL*PLUS中的结果一致。然后我用了P6SPY,这次检索出来的两条数据中第一条数据是正常的,第二条数据中C表里的FIELD居然有的为NULL,有的有值,怪异至极。明显就是有问题,所以我也不敢再在这个系统下用P6SPY了。
究竟是什么原因造成这样,我也自己分析分析,我看了一下,这个P6SPY最后更新是2003年11月,我想可能那时候的JDBC驱动可能和现在我用的Oracle驱动有不兼容的地方,所以导致失误,我也不知道我自己分析的究竟对不对。
我的Oracle数据库版本是Oracle9i,JDBC的驱动是ojdbc14-10.1.0.4.0.jar,操作系统是Windows XPP,服务器是TOMCAT 4.1