-1

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

因此,我试图创建一个通用函数,该函数将接收可调用语句签名、执行后的可调用语句对象以及已执行并打印在日志中以进行调试的 SQL。我编写了以下代码,但它在 switch case 1 的 cs.getString 上抛出了 sql 异常“参数类型无效”。

这里的参数类型是从 cs 元数据中检索到的 1,根据javadoc,常量 1 用于 CHAR,它应该映射到 java 中的字符串。甚至我为这个存储过程设置的实际参数也使用了 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;
                }
            }
        }
4

1 回答 1

3

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

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

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

于 2014-07-30T04:39:48.237 回答