如何将 NULL(或空)数组传递给 JDBC callableStatement(需要数组)
How to pass an NULL (or empty) array to a JDBC callableStatement (that expects an Array)
我无法将 NULL 值传递给需要 Array 类型的 JDBC 存储函数(使用可调用语句)。如果我试图将 IN 参数设置为 NULL(例如,我可以创建并传递一个空数组,但我不应该这样做),这只是一个问题。
例如,我可以将此作为解决方法:
callableStatement.setObject(index, callableStatement.getConnection.createArrayOf("numeric", Array().asInstanceOf[Array[AnyRef]]))
但这让我很困扰。首先,应该有一个 API 用于传递 NULL 数组。其次,我无缘无故地创建了一个空数组(我必须创建 正确的数组类型 所以这不是单行,我需要支持几种不同的类型)。它变得凌乱。
我认为我应该能够做到这一点(或者至少是非常相似的事情):
callableStatement.setNull(index, Types.ARRAY)
但它导致异常:
com.edb.util.PSQLException: ERROR: function app_fetch_user_list_pkg.n_execute(character varying, character varying[], character varying, boolean, integer) does not exist
有什么想法吗? (我们正在使用 Postgresql/EDB 以及 Oracle...到目前为止,我一直在试验 Postgresql 实例)。
试试这个:
callableStatement.setString(index, "{}");
好吧,我将 PreparedStatement.setNull(position, Types.ARRAY)
与 9.4-1202-jdbc41 JDBC 驱动程序一起使用,并且按预期工作。
我无法将 NULL 值传递给需要 Array 类型的 JDBC 存储函数(使用可调用语句)。如果我试图将 IN 参数设置为 NULL(例如,我可以创建并传递一个空数组,但我不应该这样做),这只是一个问题。
例如,我可以将此作为解决方法:
callableStatement.setObject(index, callableStatement.getConnection.createArrayOf("numeric", Array().asInstanceOf[Array[AnyRef]]))
但这让我很困扰。首先,应该有一个 API 用于传递 NULL 数组。其次,我无缘无故地创建了一个空数组(我必须创建 正确的数组类型 所以这不是单行,我需要支持几种不同的类型)。它变得凌乱。
我认为我应该能够做到这一点(或者至少是非常相似的事情):
callableStatement.setNull(index, Types.ARRAY)
但它导致异常:
com.edb.util.PSQLException: ERROR: function app_fetch_user_list_pkg.n_execute(character varying, character varying[], character varying, boolean, integer) does not exist
有什么想法吗? (我们正在使用 Postgresql/EDB 以及 Oracle...到目前为止,我一直在试验 Postgresql 实例)。
试试这个:
callableStatement.setString(index, "{}");
好吧,我将 PreparedStatement.setNull(position, Types.ARRAY)
与 9.4-1202-jdbc41 JDBC 驱动程序一起使用,并且按预期工作。