«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как я могу эффективно параметризовать предложение IN в JDBC?

Как я могу эффективно параметризовать предложение IN в JDBC?

Опубликовано 2 ноября 2024 г.
Просматривать:876

How can I parameterize an IN clause in JDBC effectively?

Параметризация предложения IN JDBC: эффективный подход

При работе с запросом предложения IN, например SELECT * FROM MYTABLE WHERE MYCOL в ( ?), параметризация аргументов обеспечивает безопасность и эффективность. Хотя JDBC не предлагает прямого решения, некоторые драйверы могут поддерживать ReadedStatement#setArray().

Вспомогательные методы для параметризации

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

  • preparePlaceHolders(int length): генерирует список заполнителей указанной длины, разделенных запятыми.
  • setValues(PreparedStatement подготовленныйстатемент, Object... значения): устанавливает значения в цикле с помощью ReadedStatement#setObject().

Пример реализации

Рассмотрим следующий метод доступа к данным:

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;
}

Основные соображения

  • Базы данных могут ограничивать количество значений, разрешенных в предложении IN.
  • Этот подход обеспечивает переносимость между различными базами данных путем изоляции генерации операторов SQL от установки значения.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3