Подстановочный знак на пустой строке

98
12

Я создаю программу Java, которая взаимодействует с базой данных mysql для школьного проекта: я использую java-соединитель mysql для выполнения следующего запроса, когда пользователь нажимает кнопку поиска через графический интерфейс:

public ResultSet getBooks(String book_id,String title,String author)
{
ResultSet rs = null;
try{
Statement stmt = conn.createStatement();
rs = stmt.executeQuery("SELECT book_id,title,author_name,branch_id,no_of_copies FROM "
+ "(temp_author NATURAL JOIN book_copies) "
+ "WHERE book_id like '%"+book_id+"%' OR title like '%"+title+"%' OR author_name like '%"+author+"%';");

}
catch(SQLException ex) {
System.out.println("Error in connection: " + ex.getMessage());
}
return rs;
}

Проблема с этим запросом заключается в том, что если какое-либо из полей (идентификатор книги, название или автор) пуст, запрос возвращает true как результат. Поэтому мой вопрос заключается в том, как использовать шаблон для поиска подходящей строки, но возвращать нулевой набор, когда строки (boook_id, title или author) пусты.

Спасибо.

PS: Я не смог опубликовать образ графического интерфейса из-за моей низкой репутации.

спросил(а) 2021-01-19T18:56:51+03:00 3 месяца, 2 недели назад
1
Решение
62

Предполагая, что ваша book_id String не является null, вы можете:

WHERE ('"+book_id+"' <> '' AND book_id like '%"+book_id+"%') OR 
('"+title+"' <> '' AND title like '%"+title+"%') OR
('"+author_name+"' <> '' AND author_name like '%"+author+"%')

Я рекомендую также использовать подготовленные заявления (для безопасности!).

ответил(а) 2021-01-19T18:56:51+03:00 3 месяца, 2 недели назад
44

Просто сделайте что-нибудь подобное и включите и высказывания с остальными вашими аргументами


If (isNull(title)&&isNull(author)&&isNull(book_id)) return null;

ответил(а) 2021-01-19T18:56:51+03:00 3 месяца, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема