Почему не передаются параметры в запрос 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), то запрос выполняется всегда.
это неожиданное поведение.