【问题标题】:Using retrieved information from method of other class使用从其他类的方法中检索到的信息
【发布时间】:2015-10-30 11:26:21
【问题描述】:

我已成功从 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!
    }

用户类是:

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;   
    }

index.jsp

<%

                UserDAO inf= new UserDAO();
                ArrayList<User> userList = inf.LoadFromDatabase();
                Recommender rc = new Recommender(userList);
   %>

【问题讨论】:

  • 什么是空的?据我所知,您正在调用非常规命名的 LoadFromDatabase() 方法,但实际上并没有对 reuslt 做任何事情。 (您还要吞下异常,而不是在每次调用时创建一个新列表,这似乎是个坏主意,但那是另一回事。)
  • 另一个非常糟糕的主意是扩展 ArrayList。这是没用的,而且会让你感到困惑。用户列表是users.LoadFromDatabase() 方法返回的列表。不是用户反对自己。所有这些实例变量都应该是方法的局部变量。
  • 感谢您的回复。

标签: java postgresql arraylist data-retrieval


【解决方案1】:

在您的情况下,扩展 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
%>

注意:不要使用您的异常,无论是抛出它还是记录它?

【讨论】:

  • 但在某些情况下我正在使用ArrayList&lt;User&gt; 并且无法删除它。我有一个介绍用户规范的用户类,ArrayList&lt;User&gt; 对这些用户做一些事情。我应该使用新类从数据库中检索用户吗?
  • 我不是告诉你删除ArrayList&lt;User&gt; userlist = new ArrayList&lt;&gt;();,我只是告诉你删除extends ArrayList&lt;User&gt;。并且无需创建新课程,您现有的课程只会这样做。
  • 这不会为您提供所需的功能,否则我会说您的逻辑不正确。您应该将 arraylist 传递给此方法并使用它。
  • 感谢您的回复。我添加了更多代码以更好地理解。我想将ArrayList&lt;User&gt; userList 插入UserList users :|怎么能这样?!
  • 为什么不在 userDAO 中添加 retainTopUsersItems 方法并删除您的 UserList 类。请参阅我的更新答案。我没有看到任何扩展 ArrayList 和使用该类的用例。
猜你喜欢
  • 2015-05-10
  • 1970-01-01
  • 1970-01-01
  • 2019-09-15
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多