Если вам нужно использовать динамическое условие, я все равно рекомендую сгенерировать where
с ?
, как
" " + key + "=?"
, а затем повторить итерацию для вызова preparedStatement.setXXX
.В зависимости от драйвера вы можете вызвать setObject
или проверить тип параметра:
if (value instanceof String)
preparedStatement.setString((String)value)
else if ...
Использование ?
имеет свои преимущества:
- Вы не думаете о преобразовании типов, таких как
Date
к строке и цитированию специальных символов. - База данных может более эффективно кэшировать планы выполнения при использовании
?
, а не буквальных значений.