【问题标题】:How to pass an NULL (or empty) array to a JDBC callableStatement (that expects an Array)如何将 NULL(或空)数组传递给 JDBC callableStatement(需要一个数组)
【发布时间】:2015-06-02 22:58:08
【问题描述】:

我在将 NULL 值传递给需要 Array 类型的 JDBC 存储函数(使用可调用语句)时遇到问题。如果我尝试将 IN 参数设置为 NULL,这只是一个问题(例如,我可以创建并传递一个空数组,但我不应该这样做)。

例如,我可以这样做:

callableStatement.setObject(index, callableStatement.getConnection.createArrayOf("numeric", Array().asInstanceOf[Array[AnyRef]]))

但这让我很困扰。首先,应该有一个用于传递 NULL 数组的 API。其次,我无缘无故地创建了一个空数组(我必须创建 正确的数组类型,所以这不是单行的,我需要支持几个不同种类)。它变得混乱。

我认为我应该能够做到这一点(或者至少是类似的东西):

callableStatement.setNull(index, Types.ARRAY)

但是会导致异常:

com.edb.util.PSQLException:错误:函数 app_fetch_user_list_pkg.n_execute(字符变化,字符变化 [],字符变化,布尔值,整数)不存在

有什么想法吗? (我们正在使用 Postgresql/EDB 以及 Oracle……到目前为止,我一直在尝试使用 Postgresql 实例)。

【问题讨论】:

标签: arrays jdbc null callable-statement


【解决方案1】:

嗯,我正在使用 PreparedStatement.setNull(position, Types.ARRAY) 和 9.4-1202-jdbc41 JDBC 驱动程序,它按预期工作。

【讨论】:

  • 我怀疑您没有使用 EDB - 似乎我们的很多问题都源于 EDB。我们确实设法让它工作(有点),但最终转移到了甲骨文,虽然这引起了一些不安,但一切都比预期的要好得多。所以...限制似乎存在于 EDB 驱动程序中。
  • @Zac 是的,我使用的是香草 Postgres。关于 EDB 的有趣评论。
【解决方案2】:

试试这个:

callableStatement.setString(index, "{}");

【讨论】:

  • 嗯,是的,这就是我的解决方法createArrayOf() 电话中发生的情况。然而,正如我所指出的,这不是我应该做的。数据库实际上不喜欢它,抛出一个关于传入空数组的异常(这只是我们的 API)。最好的解决方案是找出为什么我不能使用 setNull() 调用 - 我开始认为这可能是我们的 Postgresql/EDB 驱动程序的限制。
猜你喜欢
  • 1970-01-01
  • 2018-12-24
  • 2012-04-07
  • 1970-01-01
  • 2018-07-12
  • 1970-01-01
  • 1970-01-01
  • 2021-09-05
  • 1970-01-01
相关资源
最近更新 更多