Как установить входные параметры с их вхождениями в функцию запроса jdbcTemplate? - PullRequest
0 голосов
/ 14 января 2019

Я пытаюсь выполнить большие запросы SQL, которые могут содержать несколько идентичных параметров IN, например, {arg1, arg2, arg1, arg1, arg2}. Используя jdbcTemplate, я могу выполнить запрос, как показано ниже:

jdbcTemaplate.query(sqlQuery, new Object[] {arg1, arg2, arg1, arg1, arg2}, rowMap);

Но в некоторых запросах количество аргументов может быть большим, поэтому написание одинаковых аргументов, таких как {arg, arg1, arg1, arg2, arg1, arg1, arg1, ...}, выглядит ужасно. Есть ли способ определить набор индексов вхождений для каждого параметра in-param и отправить его в функцию запроса jdbcTemplate? Например,

 ParamsOccurrences[] paramsOccurrences = {
     new ParamsOccurrences(arg1, new int[] { 1, 4, 5, 6 }),
     new ParamsOccurrences(arg2, new int[] { 2, 3 }) };

 jdbcTemplate.query(sqlQuery, paramsOccurrences, rowMap);

Я использовал Oracle DB.

1 Ответ

0 голосов
/ 15 января 2019

Я нашел подходящее решение для меня. Простой способ - использовать параметр PreparedStatementSetter в функции запроса jdbcTemplate. Пример:

jdbcTemplate.query(sqlQuery, new PreparedStatementSetter() {
                public void setValues(PreparedStatement preparedStatement) throws SQLException {                    
                 preparedStatement.setObject(1, arg1); //example for arg1
                 preparedStatement.setObject(2, arg1);
                 ... //inside this method I just process every argument by setting specific numbers of occurrences in cycle
                }
            }, rowMap);
...