Java SQL Server: запрос данных с помощью оператора LIKE

В этом руководстве вы узнаете, как запрашивать данные из таблицы SQL Server с помощью оператора LIKE из программы Java.

Это руководство начинается с того места, где закончилось руководство по разбиению данных на страницы в Java.

Мы будем использовать оператор LIKE для поиска авторов, чьи имена или фамилии соответствуют поисковому запросу.

Шаг 1. Определите новый метод findByName в классе AuthorDB:

public List findByName(String term) throws DBException {
        var sql = "SELECT AuthorID, FirstName, LastName, BirthDate " +
                  "FROM Authors " +
                  "WHERE FirstName LIKE ? OR LastName LIKE ?";
        var authors = new ArrayList();
        try(var statement = connection.prepareStatement(sql)) {
            var searchTerm = "%" + term + "%";
            statement.setString(1, searchTerm);
            statement.setString(2, searchTerm);
            try(var resultset = statement.executeQuery()) {
                while(resultset.next()) {
                    authors.add(createAuthorFrom(resultset));
                }
            }
            return authors;
        } catch(SQLException e) {
            throw new DBException(e.getMessage());
        }
    }

Как это работает.

Сначала определите метод findByName(), который принимает параметр term, используемый для сопоставления с именами и фамилиями авторов:

public List findByName(String term) throws DBException {

Метод findByName() возвращает список объектов Author и выдает исключение DBException, если при запросе данных возникает какая-либо ошибка.

Во-вторых, создайте оператор SELECT, который использует оператор LIKE для извлечения авторов, чьи имена или фамилии содержат этот термин:

 var sql = "SELECT AuthorID, FirstName, LastName, BirthDate " +
           "FROM Authors   " +
           "WHERE FirstName LIKE ? OR LastName LIKE ?";

В-третьих, инициализируем пустой список объектов Author:

var authors = new ArrayList();

В-четвертых, создайте объект PreparedStatement с оператором SELECT, вызвав метод prepareStatement объекта Connection:

try(var statement = connection.prepareStatement(sql)) {

В-пятых, задайте значения для оператора:

var searchTerm = "%" + term + "%";
statement.setString(1, searchTerm);
statement.setString(2, searchTerm);

В-шестых, выполните запрос, создайте объект Author из каждой строки набора результатов и добавьте его в список авторов:

try(var resultset = statement.executeQuery()) {
  while(resultset.next()) {
    authors.add(createAuthorFrom(resultset));
  }
}

В-седьмых, верните список авторов:

return authors;

Наконец, создайте новое исключение DBException, если при извлечении данных возникнет какая-либо ошибка:

} catch(SQLException e) {
  throw new DBException(e.getMessage());
}

Шаг 3. Измените метод main() класса Main, чтобы использовать метод findByName() класса AuthorDB:

import java.sql.SQLException;
public class Main {
    public static void main(String[] args) {
        try(var connection = SQLServerConnection.connect()) {
            var authorDB = new AuthorDB(connection);
            var authors = authorDB.findByName("vid");
            for(var author: authors) {
                System.out.println(author.getAuthorId() + " - " + author.getFirstName() + ", " + author.getLastName());
            }
        } catch(SQLException | DBException e) {
            System.err.println(e.getMessage());
        }
    }
}

В методе main() мы вызываем метод findByName() для поиска авторов, чьи имена или фамилии содержат термин vid:

Шаг 4. Запустите программу Java. Она покажет следующий вывод:

16 - David, Hall
29 - David, Wright

Оба произведения, Дэвид Холл и Дэвид Райт, содержат термин vid.

Загрузите исходный код проекта

Загрузите исходный код проекта

Краткое содержание

  • Выполните оператор SELECT с оператором LIKE, чтобы выбрать данные, соответствующие термину.
Мирослав С.

Автор статей, ИБ-специалист