2012-09-13 5 views
3

Oracle에는 12 개의 매개 변수와 3 개의 선택적 매개 변수가있는 프로 시저가 있습니다. Spring 3.1.0에서 StoredProcedure 객체를 사용하고 있다면 이러한 선택적 매개 변수를 어떻게 설명 할 수 있습니까? 여기 Spring StoredProcedure 선택적 매개 변수

이 가진 문제는 내가 12 개 매개 변수를 공급하고있어 시작 및 종료 날짜가 null의 경우, 지금은 10을 공급하고있어 것입니다 내의 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); 
} 

을 지금까지 가지고 무엇을 예외가 생겼다.

데이터베이스의 날짜 기본값은 null입니다.

+0

'Map'에는'null' 값이 포함될 수 있기 때문에 항상 startDate 및 endDate 키를 맵에 추가하고 날짜가 null이고 null이 아닌 경우 모두 저장 프로 시저가 제대로 실행되는지 확인하려고 했습니까? – Vikdor

+0

예, 날짜가 있으면 제대로 실행되지만 문제는 java.sql.Date 생성자에 제공된'evaluation.getStartDate(). getMillis()'가 null을 반환 할 때'NullPointerException '. 그래서 내가 null을하고 프로 시저 대신 기본값 (null) 삽입 할 경우 매개 변수를 제공 할 싶습니다. – Robert

+0

'evaluation.getStartDate() == null'이라면'input_params.put (START_DATE_INPUT_PARAM, null)'을 시도해보십시오. 마찬가지로'evaluation.getEndDate == null'에 대해서도 마찬가지입니다. – Vikdor

답변

4

JDBC의 PreparedStatementsetNull 메소드를 사용하여 매개 변수에 널 값을 설정하는 기능을 제공합니다. 따라서, 저장 프로 시저가 null 인 경우 모든 매개 변수를 전달하는 한 Spring은 명령문을 준비하고 실행할 수 있습니다.

따라서 값이 null 인 입력 매개 변수를 저장 프로 시저 호출로 전송되는 맵에 추가해야했습니다.

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

동일한 내용이 END_DATE_INPUT_PARAM에도 적용됩니다.