Параметризация предложения IN JDBC: эффективный подход
При работе с запросом предложения IN, например SELECT * FROM MYTABLE WHERE MYCOL в ( ?), параметризация аргументов обеспечивает безопасность и эффективность. Хотя JDBC не предлагает прямого решения, некоторые драйверы могут поддерживать ReadedStatement#setArray().
Вспомогательные методы для параметризации
При отсутствии прямой поддержки вы может использовать вспомогательные методы для создания заполнителей для предложения IN и динамической установки значений.
Пример реализации
Рассмотрим следующий метод доступа к данным:
private static final String SQL_FIND = "SELECT id, name, value FROM entity WHERE id IN (%s)";
public List find(Set ids) throws SQLException {
List entities = new ArrayList();
String sql = String.format(SQL_FIND, preparePlaceHolders(ids.size()));
try (
Connection connection = dataSource.getConnection();
PreparedStatement statement = connection.prepareStatement(sql);
) {
setValues(statement, ids.toArray());
try (ResultSet resultSet = statement.executeQuery()) {
while (resultSet.next()) {
entities.add(map(resultSet));
}
}
}
return entities;
}
Основные соображения
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3