2015-08-07 1 views
2

J'ai récupéré des données dans la classe inférieure à partir de la base de données PostgreSQL, avec succès. Les lignes de données de table dans PostgreSQL sont ajoutées dans ArrayList<> userlist. J'ai partagé les codes corrigés.Utilisation d'informations extraites de la méthode de l'autre classe

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

La classe utilisateur est:

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

La classe UserDAO est:

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

Le index.jsp

<% 

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

Qu'est-ce que null? Vous appelez la méthode 'LoadFromDatabase()' non conventionnellement nommée, mais sans rien faire avec le reuslt, pour autant que je puisse le voir. (Vous avalez également des exceptions, et ne créez pas une nouvelle liste sur chaque appel, ce qui semble être une mauvaise idée, mais c'est une question différente.) –

+3

Une autre vraiment très mauvaise idée est d'étendre ArrayList. C'est inutile, et cela rend confus pour vous. La liste des utilisateurs est la liste ** renvoyée ** par la méthode 'users.LoadFromDatabase()'. Les utilisateurs ne sont pas eux-mêmes objets. Et toutes ces variables d'instance doivent être des variables locales de la méthode. –

+0

Merci pour vos réponses. –

Répondre

4

Extension ArrayList n'a aucun sens ton cas. Fondamentalement, vous pouvez nommer votre classe UserDAO. Et pas besoin de créer des variables de niveau classe, vous pouvez créer des variables locales.

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

Dans votre jsp utilisez la liste récupérée de la méthode.

<% 
    // 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 
%> 

Note: Ne pas consommer votre exception soit le jeter ou l'enregistrer?

+0

mais je travaille avec 'ArrayList ' dans certaines situations et ne peux pas l'enlever. J'ai une classe User qui introduit la spécification des utilisateurs et 'ArrayList ' faire quelque chose sur ces utilisateurs. Dois-je utiliser une nouvelle classe pour récupérer les utilisateurs de la base de données? –

+0

Je ne vous dis pas de supprimer 'ArrayList userlist = new ArrayList <>();', je vous dis simplement de supprimer 'extends ArrayList '. Et pas besoin de créer une nouvelle classe, votre classe existante le fait seulement. –

+0

Cela ne vous donnera pas la fonctionnalité requise ou je dirais que votre logique n'est pas bonne. Vous devriez passer arraylist à cette méthode et l'utiliser. –