CallableStatement stmt = getSession().connection().prepareCall(
"{call CRM_DAO.Search_Customers(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}");
setString(1, filter.getFirstname(), stmt);
....
stmt.execute();
我可以以某种方式看到所有输入参数,我可以在SQL中执行此过程而不是手动检查所有partameters吗?
我希望得到类似的内容:
call CRM_DAO.Search_Customers(1, 3, 'test',..
答案 0 :(得分:1)
我为此目的使用log4jdbc。工作得很好,非常容易配置。如果将其放入并将其用作jdbc驱动程序,它将自动包装大多数符合jdbc的驱动程序。
https://code.google.com/p/log4jdbc/
它可能有点繁琐,但日志级别是可配置的,并分为子类别,以帮助缩小您正在寻找的内容。
答案 1 :(得分:0)
你必须通过“以某种方式查看所有输入参数”来更好地定义你的意思。您最好的选择是使用getXXX
对象上的Statement
方法,并确切地查看为每个参数添加的值 - 但是,从您提出问题的方式来看,似乎这是正是你不想要做的事情。
编辑 根据OP的评论,目标是准确查看正在执行的语句
在JDBC中没有标准的方法。如果您打算将这些“扩展”语句打印到日志中,那么您将不得不求助于JDBC驱动程序提供程序或JEE容器可以使用可能的日志记录/跟踪方法。如果您打算在程序中以String
的形式接收这些语句,那么也许您应该按照@ jgitter的建议,下载log4jdbc
的源代码,看看他们如何打印语句(我不会如果事实证明他们只是使用getXXX
对象上的各种Statement
方法,那就不会感到惊讶。