我有一个图书馆数据库,有2个表,一个是读者表,一个是书籍表。我需要向读者展示,并在他面前展示他从图书馆拿走的书籍清单,或者展示他根本没有拿走任何书籍。我在 DAO 中有一个相应的方法,其中我创建了对数据库的查询(使用 jdbc),我尝试将相应的值存储在集合 Map<Reader, List> map = new HashMap<>(); 所以,问题是,在某些情况下,我收集一个列表,其中有一堆带有空字段的对象。而且我无法用 if(books == null) 或 if (books.isEmpty()) 检查列表来告诉读者他没有任何书籍。该方法的链接称为 findAllWithBooks(): https ://pastebin.com/yCPg9PHR 我还添加了 Book 和 Menu 类的代码(这是来自表示层的代码)
@Override
public Map<Reader, List<Book>> findAllWithBooks() {
var selectAllReadersWithBooks =
"""
SELECT reader.id, reader.name, book.name AS bookName, book.author AS authorName
FROM reader LEFT JOIN book ON reader.id = book.reader_id
""";
try (var connection = DBUtil.getConnection();
var selectAllReadersWithBooksStatement = connection.createStatement()) {
var resultSet = selectAllReadersWithBooksStatement.executeQuery(selectAllReadersWithBooks);
Map<Reader, List<Book>> map = new HashMap<>();
while (resultSet.next()) {
var book = new Book(resultSet.getString("bookName"), resultSet.getString("authorName"));
map.computeIfAbsent(mapResultSetToReader(resultSet), k -> new ArrayList<>()).add(book);
}
return map;
} catch (SQLException e) {
throw new DaoOperationException("Error finding readers with borrowed books list!");
}
}
由于可能没有适合特定读者的一本书,因此您需要检查这一点。这正是 book 字段为空的原因。
现在,没有书籍的读者将得到一个空列表并可以检查
if (books.isEmpty())
。