Бесплатный вебинар
«как найти любимую работу»
Подарки на 150 000 ₽ за участие
Живой эфир
Записи не будет!
00:00:00:00
дн.ч.мин.сек.

Использование LIKE и wildcard в подготовленных запросах MySQL

Быстрый ответ

Не забывайте, как применять знак подстановки % совместно с PreparedStatement и условием LIKE в SQL-запросах. Добавьте знак подстановки % к вашему поисковому запросу:

Java
Скопировать код
PreparedStatement pstmt = connection.prepareStatement("SELECT * FROM table WHERE column LIKE ?");
pstmt.setString(1, "term%");
ResultSet rs = pstmt.executeQuery();

Данный код поможет найти все строки с вхождением столбца column, начинающегося с "term". Если же "term" должен располагаться где угодно внутри столбца column, используйте %term%.

Кинга Идем в IT: пошаговый план для смены профессии

Эффективное применение знаков подстановки

Создание различных шаблонов для поиска

В SQL знак подстановки % представляет любую последовательность символов. Разумное его расположение в PreparedStatement дает возможность осуществлять разноплановые поиски:

  • В начале строки: "term%" подразумевает, что строка начинается с "term".
  • В конце строки: "%" + term означает, что строка заканчивается "term".
  • Где угодно: "%" + term + "%" позволяет найти "term" в любом месте строки.
Подробнее об этом расскажет наш спикер на видео
skypro youtube speaker

Учет специальных символов

Символы, вроде % и _, возможно будут мешать, если они являются частью искомой строки. Исключите недопонимания при помощи условия ESCAPE:

Java
Скопировать код
PreparedStatement pstmt = connection.prepareStatement("SELECT * FROM table WHERE column LIKE ? ESCAPE '!'");

String searchTerm = "10%!"; // Обратите внимание, в поисковом поле есть спецсимволы
String escapedTerm = searchTerm.replace("!", "!!").replace("%", "!%");
pstmt.setString(1, "%" + escapedTerm + "%");
ResultSet rs = pstmt.executeQuery();

В этом примере ! служит экранирующим символом, который нейтрализует специальное значение других символов.

CONCAT: Ваш помощник в работе с знаками подстановки

Если ваша система управления базами данных поддерживает функцию CONCAT, возьмите её на вооружение для динамической вставки знаков подстановки в SQL-выражения:

Java
Скопировать код
PreparedStatement pstmt = connection.prepareStatement("SELECT * FROM table WHERE column LIKE CONCAT('%', ?, '%')");
pstmt.setString(1, term); // 'term' — искомая строка
ResultSet rs = pstmt.executeQuery();

(Обратите внимание: замените '?' в CONCAT на ваш поисковый термин, а не на '%your_term%'. Запомните это!)

Использование подробных знаний для достижения преимуществ

Важное напоминание о производительности при использовании LIKE

Учитывайте при использовании LIKE следующее:

  • Применение знаков подстановки в начале строки ("%term") может уменьшить производительность поиска, поскольку это ограничивает применение индексов.
  • Всегда что возможно, пытайтесь поместить знак подстановки в конец строки (например, "term%"), чтобы более эффективно использовать индексы.

Знаки подстановки: используйте проценты с умом

Вместо использования сложных и путающих \u0025 для обозначения символа %, лучше вставляйте символ процента напрямую в строку запроса:

Java
Скопировать код
pstmt.setString(1, "%" + term + "%");
// Это позволяет улучшить читаемость и облегчить работу с кодом.

Расположение знака подстановки

Помещение знака подстановки в запрос может сильно повлиять на результаты поиска:

  • С начала строки: для поиска 'pattern' в начале строки: "pattern%".
  • С конца строки: для сравнения строк, заканчивающихся 'pattern': "%" + pattern.
  • С содержимым строки: чтобы найти 'pattern', окруженный другими символами: "%pattern%".

Визуализация

Для наглядности представим, как база данных отбирает данные в соответствии с критериями поиска:

Markdown
Скопировать код
Подготовленное выражение = 🎬: "Подбираем записи, удовлетворяющие нашим критериям!"

SQL-запрос = `SELECT * FROM records WHERE name LIKE ?;`

Установка параметра = 🎬🔍 '%Драма%'

Данные из базы данных:
🗄️: [📄🔍 "Мелодрама", 📄🔍 "Королева драмы", 📄🔍 "Драмеди"]

В данном случае режиссер (🎬) находит все записи, в которых где-то присутствует "Драма".

Markdown
Скопировать код
До: 🗄️ куча всех 📄📄📄 ...
После: 🎬 с отобранными карточками: [📄🔍 "Мелодрама", 📄🔍 "Королева драмы", 📄🔍 "Драмеди"]

Полезные материалы

  1. Официальное руководство по подготовленным выражениям JDBC от Oracle — неоценимый ресурс для работы с подготовленными выражениями в Java, включая запросы с LIKE.
  2. Рекомендации по безопасному программированию на Java SE — ценные рекомендации по предотвращению SQL-инъекций при использовании LIKE и подготовленных выражений.
  3. Интерфейс PreparedStatement в документации JDK 11 — подробное описание работы с интерфейсом PreparedStatement.
  4. Java PreparedStatement – как задать запрос с LIKE — практическое руководство по использованию знаков подстановки LIKE вместе с подготовленными выражениями.
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какой символ используется для обозначения произвольной последовательности символов в условии LIKE?
1 / 5