В этом руководстве вы узнаете, как запрашивать данные из таблицы 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, чтобы выбрать данные, соответствующие термину.