Подготовка запроса в виде строки с использованием JdbcTemplate - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть следующий запрос и параметры. Я не хочу выполнять query(jdbcTemplate.queryForObject), но вместо этого передать этот запрос с параметрами в виде строки другому методу. Как я могу присвоить эти параметры подготовленному оператору и сохранить запрос в виде строки?

final String QUERY = "select * " 
+  "from gfc.LSI_ELGBLTY " 
+ "where INSURANCE_ID = ? and " 
+ "SYS_CD = ? and " 
+ "ACCT_TYPE in (?)";

Object[] params = new Object[] { 
    request.getInsuranceId(),
    request.getSystemId(),
    AcctNameBuilder.toString()
};

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Вы не хотите этого делать, потому что замена ? в подготовленных операторах фактическими значениями в большинстве случаев заставит базу данных повторно обработать и перепланировать запрос SQL.Это действительно расточительно, если у вас уже есть подготовленный оператор, поэтому используйте его.

Однако вы можете определить общий PreparedStatementCreator объект и передать его в JdbcTemplate#query(PreparedStatementCreator psc, ResultSetExtractor<T> rse).

0 голосов
/ 17 сентября 2018

Посмотрите на String.format.

String.format("Hello %s, %d", "world", 50);

Вернет "Hello world 50".

Спецификаторы формата:

% s - вставить строку

% d - вставить целое число со знаком (десятичное число)

% f - вставить действительное числокак стандартное обозначение

Другой пример:

String.format("The {0} is repeated again: {0}", "word");

Возврат: «Слово повторяется снова: слово»

...