代码之家  ›  专栏  ›  技术社区  ›  pawinder gupta

JDBC SQL Server:没有为参数号设置值

  •  13
  • pawinder gupta  · 技术社区  · 6 年前

    我从从从java代码调用存储过程的代码中收到以下错误:

    异常跟踪{}org.springframework.jdbc.UncategorizedSQLException: CallableStatementCallback;SQL[{call的未分类SQLException 测试。usp xxx_GetCompanyDetails(?)?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)}];SQL状态[null];错误代码[0];值不是 为参数11设置;嵌套异常为 com.microsoft.sqlserver.jdbc.SQLServerException:未设置值 对于参数11。在 org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:84) 在 org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) 在 org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) 在 org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:1095) 在 org.springframework.jdbc.core.JdbcTemplate.call(JdbcTemplate.java:1131)

    应用程序部署在WAS8.5.5上,并使用jdbc驱动程序版本4.2。重新启动服务器时,此问题不再出现。生成的以下调用语句似乎不正确。有没有连续的逗号?他们之间。

    {呼叫测试。usp xxx获取公司详细信息(?)?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)}

    存储过程有10个参数。以下是存储过程的定义:

    CREATE PROCEDURE [test].[usp_xxx_GetCompanyDetails]
    (
        @ANumber        int,
        @CompanyId      int,
        @UserRole       varchar(15),
        @RequestId      varchar(100),
        @CompanyCode    varchar(5),
        @BaseSystem     varchar(5),
        @PType          varchar(20),    
        @PId            varchar(40),
        @IsActive       bit,     
        @responseData   xml OUT
    )
    

    下面是调用存储过程的java代码。它正在使用spring数据进行调用。

     private String executeProc(Integer aNumber,Integer companyId, String baseSystem, 
                    String role,String companyCode,String requestId, String pType,String pId,
                    boolean isActive ) throws SQLException {
    
                SQLXML responseData=null;
                Map<String,Object> inputParams= new HashMap<>();
                inputParams.put("ANumber", aNumber);
                inputParams.put("CompanyId", companyId);
                inputParams.put("UserRole", role);
                inputParams.put("RequestId", requestId);
                inputParams.put("CompanyCode", companyCode);
                inputParams.put("BaseSystem", baseSystem);
                inputParams.put("PType", pType);
                inputParams.put("PId", pId);
                inputParams.put("IsActive", isActive);
                inputParams.put("ResponseData", responseData);
    
                Map<String, Object> result = this.execute(inputParams);
                String responseXMLString = ((SQLXML) result.get("ResponseData")).getString();
    
                return responseXMLString;
            }
    

    可能出了什么问题。

    2 回复  |  直到 6 年前
        1
  •  7
  •   Ori Marko    6 年前

    有11个绑定参数(?)以及空参数 , , . 删除它以使用9个输入参数和1个输出参数的过程

    {call test.usp_xxx_GetCompanyDetails(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)}
    
        2
  •  4
  •   Sathish    6 年前

    你需要注册out参数,你可以这样尝试

    cs.registerOutParameter("ResponseData", java.sql.Types.VARCHAR);