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

Использование связанных параметров (использование?) В Prepared Statement - популярная стратегия для вставки параметров в запросы SQL во время выполнения.У меня вопрос, должна ли эта стратегия использоваться для вставки констант в запросы?Я говорю о константах, которые никак не связаны с вводом данных пользователем.Есть ли причина, по которой мне не следует использовать эти константы непосредственно в запросе SQL, а вместо этого использовать подготовленный оператор?

Чтобы показать, о чем я говорю, через код:

public static final String x = "xxx";

getJdbcTemplate.update("SELECT * FROM TABLE WHERE COLUMN = ?", x);

против

getJdbcTemplate.update("SELECT * FROM TABLE WHERE COLUMN = '" + x + "'");

1 Ответ

0 голосов
/ 12 октября 2018

Когда вы пишете такой запрос,

update("SELECT * FROM TABLE WHERE COLUMN = " + x,);

вместо этого,

update("SELECT * FROM TABLE WHERE COLUMN = ?", x);

Первый запрос не получает преимуществ от предварительной компиляции запроса.

Вместо когда вы используете?в запросе, скажем, рабочий запрос выполняется от сотен до тысяч и миллионов раз, предварительно скомпилированный запрос (запрос, который содержит?) снова и снова используется снова и снова, избегая повторной компиляции запроса, и это явление делает его намного лучшес точки зрения производительности, чем запрос, содержащий жестко закодированные данные.

Поскольку запрос содержит жестко закодированные данные, это делает запрос разным каждый раз, потому что жестко закодированные данные в большинстве случаев будут меняться в зависимости от запроса, что требует компиляции запроса при каждом выполненииснижение производительности.

Но если вам просто нужно выполнить запрос несколько раз, вы не получите существенного прироста производительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...