从Callablestatement获取参数值

时间:2014-07-29 20:34:33

标签: java jdbc ibm-midrange callable-statement

我的应用程序中有很多存储过程调用,我们使用可调用语句。有时我们需要调试传递给存储过程的参数,没有简单的方法可以写代码打印来自实体对象的所有值。

所以我试图创建一个泛型函数,它将接受可调用语句签名,执行后的可调用语句对象以及执行的SQL并在日志中打印以进行调试。我编写了以下代码,但它在switch case 1的cs.getString上抛出sql异常“Parameter type not valid”。

这里参数类型是从cs元数据中检索到的1,并且根据javadoc,常量1用于CHAR,它应该映射到java中的字符串。甚至我对这个存储过程的实际set参数也使用了String,它运行正常,那么为什么getString会因为这个异常而失败呢?

我正在使用AS400驱动程序。

        StringBuffer sb = new StringBuffer("{ call ").append(storProcName)
                .append(" (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) }");
        cs = connection.prepareCall(sb.toString());
        // Get and set all parameters
        cs.executeUpdate();
        ParameterMetaData paramd = cs.getParameterMetaData();
        int index, type;
        for (int i = 1; i < paramd.getParameterCount(); i++) {
            type = paramd.getParameterType(i);
            index = sb.indexOf("?");
            if (paramd.getParameterMode(i) == ParameterMetaData.parameterModeIn) {
                switch (type) {
                case 1:
                    sb = sb.replace(index, index + 1, "'" + cs.getString(i)
                            + "'");
                    break;
                }
            }
        }

1 个答案:

答案 0 :(得分:3)

在上面的示例中,只能在输出参数上调用getString()方法。

您是否尝试过使用驱动程序的跟踪功能来显示参数值?如果您使用的是工具箱驱动程序,可以在此处找到有关跟踪的信息:
http://www-01.ibm.com/support/docview.wss?uid=nas8N1018744

如果您使用的是本机JDBC驱动程序,可以在此处找到有关跟踪的信息: http://www-01.ibm.com/support/docview.wss?uid=nas8N1019479