【问题标题】:How can I pass optional params to procedure?如何将可选参数传递给程序?
【发布时间】:2017-09-16 19:03:53
【问题描述】:

我有 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
  • 是的,你能分享一下这个例外吗?
  • java.lang.NullPointerException: 无法拆箱空值

标签: java oracle stored-procedures jdbc parameters


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2017-08-05
    • 2019-01-18
    • 2016-11-22
    • 1970-01-01
    • 2019-08-11
    • 1970-01-01
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多