sql-server – 什么可能导致SQL Server JDBC错误’输出参数访问
我有一些访问SQL Server 2005的
Java代码,如下所示:
CallableStatement cstmt = ...; ... // Set input parameters cstmt.registerOutParameter(11,Types.INTEGER); cstmt.execute(); int out = cstmt.getInt(11); 从最后一行抛出以下异常: com.microsoft.sqlserver.jdbc.SQLServerException: The value is not set for the parameter number 0. at com.microsoft.sqlserver.jdbc.SQLServerException. makeFromDriverError(Unknown Source) at com.microsoft.sqlserver.jdbc.SQLServerCallableStatement. skipOutParameters(Unknown Source) at com.microsoft.sqlserver.jdbc.SQLServerCallableStatement. getOutParameter(Unknown Source) at com.microsoft.sqlserver.jdbc.SQLServerCallableStatement. getterGetParam(Unknown Source) at com.microsoft.sqlserver.jdbc.SQLServerCallableStatement. getInt(Unknown Source) at org.jboss.resource.adapter.jdbc.WrappedCallableStatement. getInt(WrappedCallableStatement.java:192) 被调用的存储过程看起来像这样: CREATE PROCEDURE dbo.stored_proc ( -- 10 input parameters,@out_param INT OUTPUT) AS -- Variable declarations SET @out_param = 0 -- Do processing... SET @out_param = 1 由于输入参数在进入存储过程时设置为零,在什么情况下可以设置该值?或者我误解了错误信息? 此错误可通过以下方式重现: > SQL Server JDBC驱动程序1.2 更新:它似乎是由于 – 处理…存储过程的一部分而发生的.删除它可以消除错误.这里有太多的代码可以重现,我想要的是一些可能导致缩小可能候选人的原因. 更新:将错误(例如除以零)注入 – Do处理…部分存储过程不会导致抛出此异常(相反,正如预期的那样,execute()调用失败并显示相应的错误消息) . 更新:反编译com.microsoft.sqlserver.jdbc.SQLServerCallableStatement类建议’参数号0’是存储过程返回值. 更新:我无法通过Management Studio直接调用存储过程来重现此问题. 更新:此错误的最终原因似乎是存储过程中的死锁.但是,通常,死锁导致execute()调用失败,并带有SQL Server错误代码1205的SQLException … 解决方法在您的参数上,您只是声明它们还是将它们设置为默认值?尝试将它们设置为默认值null或其他东西,看看你是否仍然得到错误.如果您没有将参数设置为默认值并且在执行存储过程时未向其传递值,则SQL Server不喜欢它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |