Récupérer un tableau d'une fonction

Récupérer un tableau d'une fonction - Java - Programmation

Marsh Posté le 05-02-2009 à 16:21:47    

Bonjour,
J'aimerai savoir comment pouvoir récupérer le tableau que me retourne ma fonction JAVA.

Code :
  1. public int[] DateDeNaissance() throws SQLException
  2. {
  3.    String sql = "SELECT DATEDIFF(NOW(),Date_naissance)/365.25 FROM usager;";
  4.    Statement stmt = con.createStatement();
  5.    ResultSet r = stmt.executeQuery(sql);
  6.    int[] age = null;
  7.    int indice = 0;
  8.    String dateNaissance = null;
  9.    
  10.    while(r.next())
  11.    {
  12.        indice = indice + 1;
  13.        dateNaissance = r.getString(1);
  14.        float conversion = Float.parseFloat(dateNaissance);
  15.        age[indice] = (int) conversion;
  16.    }
  17.    
  18.    return age;
  19. }


J'ai essayé plusieurs manière, dont :
 
System.arraycopy(DateDeNaissance(), 0, age, 0, DateDeNaissance().length);
 
Toujours avec une erreur de java.lang.NullPointerException.


Message édité par wifsimster le 05-02-2009 à 16:31:42

---------------
-- Turns your mind towards BeTa --
Reply

Marsh Posté le 05-02-2009 à 16:21:47   

Reply

Marsh Posté le 05-02-2009 à 16:28:00    

Faudrait ptet songer à le créer, à un moment, ton tableau, dans ta méthode [:petrus75]

 

Non parce que int[] age = null; t'es gentil mais ça crée pas un tableau [:petrus75]

 

Accessoirement, ce code est pas franchement propre, et faut utiliser les balises [ code=java] et [ /code] pour que ce soit lisible. [:petrus75]

 

Et faudrait lire le style guide, parce que les méthodes en java ça se nomme pas en PascalCase mais en camelCase. [:petrus75]


Message édité par masklinn le 05-02-2009 à 16:32:41

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 05-02-2009 à 16:34:16    

Désolé j'ai rectifié la mise en page ^^'
Je suppose que tu veux de me parler d'instancier mon tableau par t'es détours ...


---------------
-- Turns your mind towards BeTa --
Reply

Marsh Posté le 05-02-2009 à 16:35:15    

wifsimster a écrit :

Je suppose que tu veux de me parler d'instancier mon tableau par t'es détours ...


Uniquement pour les lignes 1 et 2.
 
Et je pourrais ajouter que j'aurais tendance à utiliser une List plutôt qu'un array.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 05-02-2009 à 16:38:11    

Ce que je veux c'est simplement récupérer une liste d'âge donc un tableau ou une liste ...
Si tu me trouve une méthode plus simple et qui marche pour un élément de type List. Je suis preneur !


---------------
-- Turns your mind towards BeTa --
Reply

Marsh Posté le 05-02-2009 à 16:50:30    

Identique à la méthode pour un array, tu crées ton conteneur, et tu mets des éléments dedans. L'avantage d'une liste étant qu'elle a une taille variable, alors que l'array a une taille fixe à partir du moment où il a été instancié.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 05-02-2009 à 19:58:08    

Code :
  1. public List<Integer> DateDeNaissance() throws SQLException
  2. {
  3.    String sql = "SELECT DATEDIFF(NOW(),Date_naissance)/365.25 FROM usager;";
  4.    Statement stmt = con.createStatement();
  5.    ResultSet r = stmt.executeQuery(sql);
  6.    List<Integert> age = new ArrayList<Integer>();
  7.    int indice = 0;
  8.    String dateNaissance = null;
  9.    
  10.    while(r.next())
  11.    {
  12.        indice = indice + 1;
  13.        dateNaissance = r.getString(1);
  14.        float conversion = Float.parseFloat(dateNaissance);
  15.        age.add((int) conversion);
  16.    }
  17.    
  18.    return age;
  19. }


 
Ca doit te donner un truc de se genre. Mias j'ai pas testé le code modifié.

Reply

Marsh Posté le 06-02-2009 à 08:10:42    

Juste une faute de frappe à la 6° ligne sinon je teste ça ...
 
Edit : Ça marche nickel et c'est plus simple; Merci beaucoup ;)


Message édité par wifsimster le 06-02-2009 à 08:28:07

---------------
-- Turns your mind towards BeTa --
Reply

Marsh Posté le 06-02-2009 à 23:55:19    

N'oublie pas le le stmt.close() avant le return, sinon tu as une jolie fuite de ressource. D'ailleurs, il faut p-ê songer à mettre tout ce code dans un try {...}catch() finally{stmt.close();} pour le cas où pèterait une exception :
- lors de l'executeQuery,
- sur le parseFloat (qui peut avoir n'importe quoi comme entrée, même un null, si getString tape sur une colonne de la table qui n'est pas NOT NULL. Vérifier les contraintes appliquées sur chaque colonne de la table).

 

Et utilise setFetchSize() et  PreparedStatement  pour optimiser la performance.

 

Voici une version plus robuste et (bcp) plus rapide de ton code

Code :
  1. void mapResultSet(ResultSet rs, List<Integer> ageList ) {
  2.    try {
  3.         String age= rs.getString(1);
  4.         if (age != null) {  // on suppose que la colonne n'est pas NOT NULL
  5.              Float conversion = Float.valueOf(age);
  6.              ageList.add(conversion.intValue());
  7.         }
  8.    }
  9.     catch(NumberFormatException e) {
  10.            // traitement erreur
  11.    }
  12. }
  13.  
  14. public List<Integer> fetchAgeList() throws SQLException
  15. {
  16.    String sql = "SELECT DATEDIFF(NOW(),Date_naissance)/365.25 FROM usager";
  17.    List<Integert> ageList = new ArrayList<Integer>();
  18.  
  19.    PreparedStatement stmt = con.prepareStatement(sql);
  20.    try {
  21.        stmt.setFetchSize(50);
  22.        ResultSet r = stmt.executeQuery();
  23.        while(r.next()){
  24.           mapResultSet(r, ageList );
  25.       }
  26.    }
  27.    finally {
  28.        stmt.close();
  29.    }
  30.  
  31.    return ageList;
  32. }


Message édité par el muchacho le 07-02-2009 à 07:33:53

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed