请问大家如何对jdbc执行的每条sql语句进行检测?
例如:PrepareStatement pstmt = conn.prepareStatement(LOAD_ALLSURVEY);
      rs = pstmt.executeQuery();如何在执行rs = pstmt.executeQuery();时将执行的 sql语句 和 参数 打印出来?
我试过的方法有:
1.找到classes12.jar的源代码,并对其进行修改,然后再打包,但是没有找到对应的源代码?
2.对其进行反编译,但是效果不怎么理想。
请问大家有什么好的办法没有?

解决方案 »

  1.   


    PreparedStatement pstm = conn.prepareStatement(sql);
    pstm.setString(1, "X");
    ResultSet rs2 = pstm.executeQuery();
    他的原理应该是通过PreparedStatement pstm = conn.prepareStatement(sql);存入了sql语句通过下面的set 进行?的替换我认为里面应该有个private String sql; 这个变量 来存放sql要打印 就要提供方法还有就是单调用set方法是 把变他的值 和 =前面的值 赋值到一个数组中, 通过方法返回里面的值所以 现在的问题是调出PreparedStatement的源码 但是我也没有找到 只是晓得理论上做法!
      

  2.   

    写一个PreparedStatement 的适配器就OK了,简单明了
      

  3.   

    public class MyPreparedStatement implements PreparedStatement {
     private PreparedStatement ps; public MyPreparedStatement(PreparedStatement ps) {
      this.ps = ps;
     }
     //
     public ResultSet executeQuery(String sql) throws SQLException {
      System.out.println(sql);
      ps.executeQuery(sql);
     }  //其他方法,都委托给ps处理
    }
    Connection conn = ...PreparedStatement pstmt = new MyPreparedStatement(conn.prepareStatement(...));接下来就用这个pstmt来执行sql语句