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

时间:2017-04-20 08:47:17

标签: java oracle stored-procedures jdbc parameters

我有2个mrthod save()edit()实体。当我保存实体时,我检查日期重叠,如果日期是唯一的 - 保存。为此,我使用oracle程序。如果程序返回> 0行 - 这个时期不是唯一的。当我编辑实体时 - 它已经在db中,我需要通过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);会抛出错误。

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

1 个答案:

答案 0 :(得分:2)

如果您的ID可以是null,那么您可以使用call.setLong(5, null)代替setNull()而不是if (id == null) { call.setNull(5, java.sql.Types.BIGINT); } else { call.setLong(5, id); }

var image = document.createElement('img');
image.onload = function () {
// onload callback
}
image.setAttribute('crossOrigin', '');
image.src = url + '?' + new Date().getTime();