Почему не передаются параметры в запрос jdbc.query()?

Выполняется запрос к бд в среде java-17 spring:

List<T> query(String sql, Map<String, Object> paramsQuery, RowMapper<T> rowMapper);

В строке sql вызывается хранимая процедура:

sql = "select * from actorProtocolRangeDate(:param0, :param1, :param2);"
paramsQuery = {param0=palomnic, param1=20220515, param2=20220515}

для бд postgresql-14 запрос возвращает строки данных.

но для бд h2 version 2.1.212 параметры в запрос не передаются. запрос возвращается с ошибкой значения null всех параметров, хотя параметры формируются и передаются в Map<String, Object> верно.

нюанс: для db h2 строка sql немного отлична:

sql = "call actorProtocolRangeDate(:param0, :param1, :param2);"

это работало в старой версии db h2 1.4.200

сейчас приложение создаёт все beans и стартует. компонент jdbc работает с бд postgres, но не работает с db h2 2.1.212, т.к. способ передачи параметров не работает.

Как передать параметры в запрос jdbc.query() db h2 ?


Ответы (1 шт):

Автор решения: Карабас

загадочный случай.

вот фрагмент хранимой процедуры db h2:

String sql = "select idactor" +
" from actor where nameactor = '" + nameactor + "'";
rs = conn.createStatement().executeQuery(sql);
while (rs.next()) {act = (UUID) rs.getObject(1);}

значение act всегда <> null, т.к. на клиенте объект actor получается как

Actor actor = authenticationFacade.getActorSession();

т.е. как существующий пользователь.

далее в тексте alias db h2 формируется запрос с использованием значения act. процедура выполняется в консоли, но не выполняется при запуске из браузера.

если в тексте alias поставить проверку if (act == null), то запрос выполняется всегда.

это неожиданное поведение.

→ Ссылка