Java 从Callablestatement获取参数值
我的应用程序中有很多存储过程调用,我们使用的是可调用语句。有时我们需要调试传递给存储过程的参数,除了编写代码打印来自实体对象的所有值之外,没有其他简单的方法 因此,我试图创建一个通用函数,该函数将接受可调用语句签名,以及执行后的可调用语句对象,并用于SQL,该SQL已执行并打印在日志中以进行调试。我编写了以下代码,但它在开关案例1的cs.getString上引发sql异常“Parameter type not valid” 这里的参数类型是从cs元数据中检索到的1,根据上下文,常量1表示CHAR,它应该映射到java中的字符串。即使我为这个存储过程实际设置的参数也使用了String,这很好,那么为什么getString会因这个异常而失败呢 我使用的是AS400驱动程序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
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异常为“参数类型无效”。正如我在下面的回答中提到的,我将在以后处理这个问题,因为现在我正在打印传递给它的所有参数。稍后我会试试你的建议。