【问题标题】:java CallableStatement print all parameters in procedurejava CallableStatement 打印过程中的所有参数
【发布时间】:2014-05-05 12:46:31
【问题描述】:
CallableStatement stmt =  getSession().connection().prepareCall(
                "{call CRM_DAO.Search_Customers(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}");

setString(1, filter.getFirstname(), stmt);
....
stmt.execute();

我能否以某种方式查看我可以在 SQL 中执行此过程的所有输入参数,而不是手动检查所有参数?

我想找回类似的东西:

call CRM_DAO.Search_Customers(1, 3, 'test',..

【问题讨论】:

  • 你的问题很不清楚; 究竟你想做什么?
  • JDBC 不强制要求任何此类支持,因为在大多数实现中,查询文本和参数永远不会在执行时一起结束(查询已准备好,执行时仅发送参数值)。

标签: java jdbc


【解决方案1】:

我为此目的使用 log4jdbc。效果很好,很容易配置。如果您将其放入并将其用作您的 jdbc 驱动程序,它将自动包装大多数与 jdbc 兼容的驱动程序。

https://code.google.com/p/log4jdbc/

这可能有点啰嗦,但日志级别是可配置的并分为子类别,以帮助缩小您要查找的范围。

【讨论】:

    【解决方案2】:

    您必须更好地定义“以某种方式查看所有输入参数”的含义。您最好的选择是在 Statement 对象上使用 getXXX 方法,并准确查看为每个参数放置了哪些值 - 但是,从您提出问题的方式来看,这似乎正是您 不想想做。

    编辑 根据 OP 的评论,目标是准确查看正在执行的语句

    在 JDBC 中没有这样做的标准方法。如果您的意图是将这些“扩展”语句打印到日志中,那么您将不得不求助于您的 JDBC 驱动程序提供程序或 JEE 容器提供的日志/跟踪方法。可能。如果您的意图是在您的程序中以String 的形式接收这些语句,那么也许您应该遵循@jgitter 的建议,下载log4jdbc 的源代码,看看他们如何打印该语句(我不会感到惊讶如果事实证明他们只是在Statement 对象上使用各种getXXX 方法)。

    【讨论】:

    • 我有 ParameterMetaData 但我看不到其中的值
    • 处理这种情况的一种方法是使用记录您所需参数的代理驱动程序。查看我的答案以获取有关一种名为 log4jdbc 的此类代理的更多信息。
    猜你喜欢
    • 2011-06-07
    • 1970-01-01
    • 2014-03-30
    • 2013-02-14
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-09
    相关资源
    最近更新 更多