如何在Java中打印语句(CallableStatement)?

2022-09-02 11:00:27

如何打印此甲骨文调用语句?

   ocstmt = (OracleCallableStatement) connection.prepareCall("{?= call 
            package.method(id => ?, name=>?)}");
   ocstmt.registerOutParameter(1, OracleTypes.CURSOR);            
   ocstmt.setInt(2, obj.getId());
   ocstmt.setString(3, obj.getName());
   ocstmt.execute();
   resultSet = ocstmt.getCursor(1);

我的意思是,我怎样才能知道什么查询进入了数据库,我该如何打印查询?因为有时它会给我错误,比如“错误类型”,这就是为什么我想看看这个查询


答案 1

您是否在使用 log4j?

如果是这样,请为 sql 添加记录器,如下所示。

log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG

如果您使用的是ORM框架,例如ibatis,则可以添加其他记录器,如下所示。

log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG

答案 2

是的,您可以执行此操作。你可以将可调用语句包装在代理中,该代理可以在打印时替换实际值(并显示 sql),或者四处寻找具有有意义的 toString 的驱动程序。javaworld 文章还有p6spy等。存储过程更难,但仍然可行。


推荐