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