Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从Callablestatement获取参数值_Java_Jdbc_Ibm Midrange_Callable Statement - Fatal编程技术网

Java 从Callablestatement获取参数值

Java 从Callablestatement获取参数值,java,jdbc,ibm-midrange,callable-statement,Java,Jdbc,Ibm Midrange,Callable Statement,我的应用程序中有很多存储过程调用,我们使用的是可调用语句。有时我们需要调试传递给存储过程的参数,除了编写代码打印来自实体对象的所有值之外,没有其他简单的方法 因此,我试图创建一个通用函数,该函数将接受可调用语句签名,以及执行后的可调用语句对象,并用于SQL,该SQL已执行并打印在日志中以进行调试。我编写了以下代码,但它在开关案例1的cs.getString上引发sql异常“Parameter type not valid” 这里的参数类型是从cs元数据中检索到的1,根据上下文,常量1表示CHAR

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

因此,我试图创建一个通用函数,该函数将接受可调用语句签名,以及执行后的可调用语句对象,并用于SQL,该SQL已执行并打印在日志中以进行调试。我编写了以下代码,但它在开关案例1的cs.getString上引发sql异常“Parameter type not valid”

这里的参数类型是从cs元数据中检索到的1,根据上下文,常量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;
                }
            }
        }
StringBuffer sb=newstringbuffer(“{call”).append(storProcName)
.append((,,,,,,,,,,,,,,,,,,,,,,,)));
cs=connection.prepareCall(sb.toString());
//获取并设置所有参数
cs.executeUpdate();
ParameterMetaData paramd=cs.getParameterMetaData();
int索引,类型;
对于(int i=1;i
在上面的示例中,只能对输出参数调用getString()方法

您是否尝试过使用驱动程序的跟踪功能来显示参数值?如果您正在使用工具箱驱动程序,可以在此处找到有关跟踪的信息:

如果您使用的是本机JDBC驱动程序,可以在此处找到有关跟踪的信息:

什么例外?包括stacktrace@Mark异常为“参数类型无效”。正如我在下面的回答中提到的,我将在以后处理这个问题,因为现在我正在打印传递给它的所有参数。稍后我会试试你的建议。