#java #mysql #arraylist
#java #mysql #arraylist
Вопрос:
У меня есть класс BookBean, где у меня есть поля из базы данных: id, title и author. Я хочу создать ArrayList bookList типа BookBean, где можно получить каждую строку из базы данных. Например, bookList[0] должен указывать на первую строку из базы данных: id = 1, title=первый заголовок, author= первый автор.
Я попытался объявить переменную BookBean и ArrayList:
static ArrayList<BookBean> listBooks = new ArrayList<>();
static BookBean bookBean = new BookBean(1,"title", "author");
Это моя функция, в которой я получаю элементы из базы данных. Я могу получить доступ к элементам внутри поиска в наборе результатов, но не за его пределами. Как я могу правильно сохранить элементы в arraylist?
public static void generateBookList(){
try {
Connection connection = ConnectToDatabase.createConnection();
if (connection != null) {
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * from book ");
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
bookBean.setId(resultSet.getInt("id_book"));
bookBean.setTitle(resultSet.getString("title"));
bookBean.setAuthor(resultSet.getString("author"));
listBooks.add(bookBean);
System.out.println(listBooks.get(0).getId());
System.out.println(listBooks.get(0).getTitle());
System.out.println(listBooks.get(0).getAuthor());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
Комментарии:
1. Ваш список должен содержать несколько книг. Не только один. Итак, вам нужно создавать новую книгу на каждой итерации вашего цикла и добавлять эту новую книгу в список (который, вероятно, также не должен быть статическим, но вместо этого создается и возвращается вашим методом.
Ответ №1:
Вам нужно создавать новый ОБЪЕКТ BookBean
каждый раз, когда вы вставляете в ArrayList.
public static void generateBookList(){
try {
Connection connection = ConnectToDatabase.createConnection();
if (connection != null) {
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * from book ");
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
//You are actually using the same object again and again.
// Following line is important.
BookBean x = new BookBean(resultSet.getInt("id_book"), resultSet.getString("title"), resultSet.getString("author"));
listBooks.add(x);
System.out.println(listBooks.get(0).getId());
System.out.println(listBooks.get(0).getTitle());
System.out.println(listBooks.get(0).getAuthor());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}