Как создать и получить доступ к arraylist (на java) строк элементов из базы данных mysql?

#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();
        }
    }