如何打印此OracleCallableStatement?
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);
我的意思是,我如何知道哪个查询进入数据库,我如何打印该查询?因为有时它会给出像“错误类型”这样的错误,这就是为什么我要看这个查询
发布于 2013-11-21 11:39:17
你在使用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
发布于 2013-11-18 23:55:02
是的,你可以做到。您可以将可调用的语句包装在代理中,以便在打印(并显示sql)时替换实际值,或者四处寻找具有有意义的toString的驱动程序。还有p6spy,还有其他的。存储过程比较难,但仍然可行。
发布于 2011-01-11 20:01:13
您不能通过打印语句来获取SQL。
您发布的示例是触发错误的“有时”之一吗?
为什么你要把这个放到OracleCallableStatement上呢?调用的哪一部分不是标准CallableStatement?
https://stackoverflow.com/questions/4657349
复制相似问题