java - 如何将可选参数传递给过程?

标签 java oracle stored-procedures jdbc parameters

我有 2 个 mrthods save()edit() 实体。当我保存实体时,我检查日期重叠以及日期期间是否唯一 - 保存。为此,我使用 oracle 程序。如果过程返回 >0 行 - 此期间不唯一。当我编辑实体时 - 它已经在数据库中,我需要按 id 进行可选检查。

CallableStatement call = connection.prepareCall("{ ? = call checkDateRangesOverlap(?,?,?,?)}");
call.registerOutParameter(1, Types.INTEGER); // or whatever it is
Date dateStart = Date.from(start.atZone(ZoneId.systemDefault()).toInstant());
Date dateEnd = Date.from(end.atZone(ZoneId.systemDefault()).toInstant());
call.setDate(2, new java.sql.Date(dateStart.getTime()));
call.setDate(3, new java.sql.Date(dateEnd.getTime()));
call.setLong(4, user.getId());
call.setLong(5, id);
call.execute();

但是如果我创建新实体 - id 为 nullcall.setLong(5, id); 抛出错误。

如何将可选参数传递给过程?

最佳答案

如果您的 id 可以为 null,那么您可以使用 setNull(),而不是使用 call.setLong(5, null)这:

if (id == null) {
    call.setNull(5, java.sql.Types.BIGINT);
} else {
    call.setLong(5, id);
}

关于java - 如何将可选参数传递给过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43514554/

相关文章:

java - 卡在数独回溯求解器中(Java)

sql - oracle中的子选择

java - 从 'stream()' 或 'parallelStream()' 中捕获异常会丢失正确的值

java - 使用 Java 连接到 URL 并获取 401

performance - 如何分析 Oracle 存储过程的端到端性能

oracle - 我可以删除/添加属性而不产生任何后果吗? Oracle 对象类型

MySQL 和动态查询错误 1064

java - 如何使用JAVA异步执行存储过程

PHP MySql执行SP时查询错误

java - 如何从西方日期格式转换为日本日期格式?