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

Java 如何将可选参数传递给过程?,java,oracle,stored-procedures,jdbc,parameters,Java,Oracle,Stored Procedures,Jdbc,Parameters,我有两种方法save()和edit()实体。当我保存实体时,我检查日期重叠和日期周期是否唯一-保存。为此,我使用oracle过程。如果过程返回>0行-此期间不唯一。当我编辑实体-它已经在数据库中,我需要可选的检查id CallableStatement call = connection.prepareCall("{ ? = call checkDateRangesOverlap(?,?,?,?)}"); call.registerOutParameter(1, Types.INTEGER);

我有两种方法
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是
null
call.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);
}

异常是什么?当我保存新实体id=NULLyes时,您可以共享异常吗?java.lang.NullPointerException:无法取消对null值的绑定