繁体   English   中英

Spring StoredProcedure可选参数

[英]Spring StoredProcedure Optional Parameters

我在Oracle中有一个程序,它有12个参数和3个可选参数。 如果我在Spring 3.1.0中使用StoredProcedure对象,如何解释这些可选参数?

这是我在StoredProcedure课程中到目前为止的内容

public Map<String, Object> execute(Evaluation evaluation) {
    Map<String, Object> input_params = new HashMap<String, Object>();
    input_params.put(COURSE_MAIN_PK1_INPUT_PARAM, evaluation.getCourseId());
    input_params.put(USERS_PK1_INPUT_PARAM, evaluation.getUsersPk1());
    input_params.put(ACCREDITATION_PK1_INPUT_PARAM, evaluation.getAccreditationPk1());
    input_params.put(TYPE_PK1_INPUT_PARAM, evaluation.getTypePk1());
    input_params.put(PRIVACY_TYPE_PK1_INPUT_PARAM, evaluation.getPrivacyTypePk1());
    input_params.put(FORM_TYPE_PK1_INPUT_PARAM, evaluation.getFormTypePk1());
    input_params.put(TITLE_INPUT_PARAM, evaluation.getTitle());
    input_params.put(DESCRIPTION_INPUT_PARAM, evaluation.getDescription());

    if(evaluation.getStartDate() != null) {
        input_params.put(START_DATE_INPUT_PARAM, new java.sql.Date(evaluation.getStartDate().getMillis()));         
    }

    if(evaluation.getEndDate() != null) {
        input_params.put(END_DATE_INPUT_PARAM, new java.sql.Date(evaluation.getEndDate().getMillis())); 
    }

    input_params.put(SAVE_TO_GRADECENTER_INPUT_PARAM, evaluation.getGradeCenterColumn());
    input_params.put(CREATE_ANNOUNCEMENT_INPUT_PARAM, evaluation.getAnnouncement());

    return super.execute(input_params);
}

这个问题是我提供了12个参数,如果开始和结束日期为空,现在我提供10并获得异常。

数据库中日期的默认值为null

JDBC的PreparedStatement提供了使用setNull方法将null值设置为参数的工具。 因此,只要将所有参数传递给存储过程(如果它们为null),Spring就能够准备语句并执行它。

因此,您需要将值为null的输入参数添加到发送到存储过程调用的Map。

input_params.put(START_DATE_INPUT_PARAM, 
                 (null != evaluation.getStartDate() 
                  ? new java.sql.Date(evaluation.getStartDate().getMillis()) 
                  : null));

同样适用于END_DATE_INPUT_PARAM。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM