Использование полученной информации из метода другого класса

2

Я успешно получил данные из нижележащего класса из базы данных PostgreSQL. Строки данных таблицы в PostgreSQL добавляются в ArrayList<> userlist. Я поделился исправленными кодами.

class UserList extends ArrayList<User> {
// as in comments said it seems really bad idea is to extend ArrayList. So, avoid it!
    }

Класс User:

public class User {

    private String firstName;
    private String lastName;

       public User(String firstName, String lastName) {
            this.firstName = firstName;
            this.lastName = lastName;
        }

        public void calculateSimilarityUser(User u){
            .... //some codes                
        }

        public String getFirstName() {
            return firstName;
        }

        public void setFirstName(String firstName) {
            this.firstName = firstName;
        }

        public String getLastName() {
            return lastName;
        }

        public void setLastName(String lastName) {
            this.lastName = lastName;
        } 
    }

Класс UserDAO:

public class UserDAO {

    static Connection currentCon = null;
    static ResultSet rs = null;

    private ArrayList<User> userlist = new ArrayList<>();

    public ArrayList<User> LoadFromDatabase(){

        PreparedStatement userinfoStmt = null;

        String loadUsersInfo = "SELECT * FROM userinfo";

            try {
                currentCon = ConnectionManager.getConnection();
                userinfoStmt = currentCon.prepareStatement(loadUsersInfo);
                rs = userinfoStmt.executeQuery();


                while (rs.next()) {
                    User us = new User(rs.getString("firstname"), rs.getString("lastname"), rs.getInt("index"));


                userlist.add(us);
            }

            userinfoStmt.close();
            currentCon.close();

        } catch (Exception e) {
        }

        return userlist;   
    }

Индекс.jsp

<%

                UserDAO inf= new UserDAO();
                ArrayList<User> userList = inf.LoadFromDatabase();
                Recommender rc = new Recommender(userList);
   %>
  • 3
    Что ноль? Вы вызываете нетрадиционный метод LoadFromDatabase() , но на самом деле ничего не делаете с reuslt, насколько я вижу. (Вы также проглатываете исключения и не создаете новый список при каждом вызове, что кажется плохой идеей, но это другой вопрос.)
  • 3
    Еще одна действительно плохая идея - расширить ArrayList. Это бесполезно, и это сбивает вас с толку. Список пользователей - это список, возвращаемый методом users.LoadFromDatabase() . Не пользователи возражают против самого себя. И все эти переменные экземпляра должны быть локальными переменными метода.
Показать ещё 1 комментарий
Теги:
arraylist
data-retrieval

1 ответ

4
Лучший ответ

Расширение ArrayList не имеет никакого смысла в вашем случае. В принципе вы можете назвать свой класс UserDAO. И нет необходимости создавать переменные уровня класса, вы можете создавать локальные переменные.

public class UserDAO { // no need to extend and changed name to UserDAO

    public List<User> retainTopUsersItems(int maxNumOfReturnedResources, List<User> userList) {
        List<User> retainList = new ArrayList<User>();
        for (int i = 0; i < maxNumOfReturnedResources; i++) {
            retainList.add(userList.get(i));
        }
        return retainList;
    }

    public List<User> loadFromDatabase() {
        Connection userinfoCon = null;
        ResultSet userinfoRS = null;
        List<User> userlist = new ArrayList<>();

В вашем jsp используйте извлеченный список из метода.

<%
    // UserList users = new UserList();
    UserDAO inf= new UserDAO();
    List<User> userList = inf.loadFromDatabase(); // See the changes
    Recommender rc = new Recommender(userList); // Change constructor definition in your Recommender
%>

Примечание. Не уничтожайте свое исключение и не бросайте его или не регистрируйте?

  • 0
    но я работаю с ArrayList<User> в некоторых ситуациях и не могу удалить его. У меня есть класс User, который представляет спецификацию пользователей, и ArrayList<User> делает что-то с этими пользователями. Должен ли я использовать новый класс для извлечения пользователей из базы данных?
  • 0
    Я не говорю вам удалить ArrayList<User> userlist = new ArrayList<>(); Я просто говорю вам, чтобы удалить extends ArrayList<User> . И нет необходимости создавать новый класс, ваш существующий класс делает это только.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню