我有一个NULL值传递给一个JDBC存储函数(使用可调用语句)的麻烦。这只是一个问题,如果我试图将IN参数设置为NULL(例如,我可以创建并传递一个空数组,但我不应该这样做)。如何通过一个期望的阵列型的NULL(或空)阵列到JDBC的CallableStatement(即期望的阵列)
例如,我可以做到这一点作为一个变通:
callableStatement.setObject(index, callableStatement.getConnection.createArrayOf("numeric", Array().asInstanceOf[Array[AnyRef]]))
但是,这困扰着我。首先,应该有一个用于传递NULL数组的API。其次重要的是,我创建一个空数组没有很好的理由(我不得不创建正确的数组类型所以这不是一个班轮,我需要支持几种不同的类型)。它变得混乱。
我应该能够做到这一点,我认为(或者至少东西非常相似):
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实例)。
您是否尝试使用的'setObject'方法,它允许用户指定目标类型一个(即['的setObject(INT parameterIndex,对象x,INT的targetSqlType)'](http://docs.oracle.com/ JavaSE的/ 8 /文档/ API/JAVA/SQL/PreparedStatement.html#的setObject-INT-java.lang.Object中-内部 - )或['的setObject(INT parameterIndex,对象x,SQLTYPE的targetSqlType)'](HTTP:// docs.oracle.com/javase/8/docs/api/java/sql/PreparedStatement.html#setObject-int-java.lang.Object-java.sql.SQLType-) –
是......没有多少运气。我还试过'的setBinaryStream()',并得到了回报异常消息:“此功能尚未实现”我真的不喜欢这个驱动 – Zac