gpt4 book ai didi

java - Spring StoredProcedure 可选参数

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:21:00 26 4
gpt4 key购买 nike

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

这是目前我的 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 方法将空值设置为参数的工具。因此,只要将所有参数传递给存储过程(如果它们为空),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。

关于java - Spring StoredProcedure 可选参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12398568/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com