Как передать NULL (или пустой) массив в callableStatement JDBC (который ожидает массив)

У меня возникают проблемы при передаче значения NULL в хранимую функцию 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: ОШИБКА: функция app_fetch_user_list_pkg.n_execute(изменение символа, изменение символа [], изменение символа, логическое значение, целое число) не существует

Есть идеи? (Мы работаем с Postgresql/EDB, а также с Oracle... пока я экспериментировал с экземпляром Postgresql).

2 ответа

Решение

Ну я пользуюсь PreparedStatement.setNull(position, Types.ARRAY) с драйвером JDBC 9.4-1202-jdbc41, который работает как положено.

Попробуй это:

callableStatement.setString(index, "{}");
Другие вопросы по тегам