Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
5195 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Un code plus compact, utilisation d'interfaces (surement)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Un code plus compact, utilisation d'interfaces (surement)

n°170346
El_gringo
Posté le 03-07-2002 à 11:26:50  profilanswer
 

Bon, allez, j'vais essayer d'expliquer mon pb.
J'ai une quizaine de tables SQL.
Dans chacune, je vais récupérer un ou une collection de bean que g créé, qui correspondent à peu près aux colones de chaque tables.
J'ai une classe JSQLRequest qui est chargée de faire toutes les requêtes.
Cette classe à toute sorte de méthode de ce genre:

Code :
  1. /** Récupère toutes les applications autorisées à la recherche pour une utilisateur donné.
  2.      * @param login login de l'utilisateur (code utilisateur) dont les données sont récupérées.
  3.      * @throws JLdsServletException Lancée si une erreur SQL est produite.
  4.      * @return une énumération (<CODE>Enumeration</CODE> ) de beans <CODE>Application</CODE>
  5.      */   
  6.     public Enumeration getAllAutorizedApplications (String login) throws JLdsServletException {
  7.      if (login == null)
  8.             return null;
  9.        
  10.         Object[] arguments = {login};
  11.         String formatStr = Resources.getResources ().getLabel ("sqlrequest.getallautorizedappli" );
  12.         String sqlQuery = MessageFormat.format(formatStr, arguments);
  13.        
  14.         Connection         c    = null;
  15.         Statement          stmt = null;
  16.         ResultSet          r    = null;
  17.         try {
  18.             c     = this.connectionPool.getConnection ();
  19.             stmt  = c.createStatement ();
  20.             r     = stmt.executeQuery (sqlQuery);
  21.            
  22.             Vector vectAutorizedApps = new Vector ();
  23.             while (r.next ()) {
  24.                 String codeApp = r.getString (1).trim ();
  25.                 String nomApp  = r.getString (2).trim ();
  26.                 vectAutorizedApps.add (new Application (codeApp, nomApp));
  27.                 }
  28.             return (vectAutorizedApps.elements ());
  29.         }
  30.         catch (SQLException e) {
  31.             throw new JLdsServletException ("Une erreur est survenue lors de l'execution/lecture des résultats, de la requète :\n\t" + sqlQuery, e);
  32.         }
  33.         finally {
  34.            try { if (r != null) r.close(); } catch (SQLException x) { throw new JLdsServletException ("Erreur de fermeture du ResultSet ( " + sqlQuery, x); }
  35.            try { if (stmt != null) stmt.close(); } catch (SQLException x) { throw new JLdsServletException ("Erreur de fermeture du Ctatement ( " + sqlQuery, x); }
  36.            try { if (c != null) c.close(); } catch (SQLException x) { throw new JLdsServletException ("Erreur de libération de la connection ( " + sqlQuery, x); }
  37.         }
  38.     }


Où seule les passages en gras diffèrent. vous voyez pas un moyen de ne pas réécrire tout ça pour chaque récupération de beans à partir de ma BD ?


Message édité par El_gringo le 03-07-2002 à 11:27:40
mood
Publicité
Posté le 03-07-2002 à 11:26:50  profilanswer
 

n°170348
El_gringo
Posté le 03-07-2002 à 11:28:58  profilanswer
 

Ouuu que c'est moche ici...
Déja, mon code est pas super beau avec mon éditeur, ma alors, posté ici, c une catastrophe.
Enfin, si vous arrivez qd même à lire, et que ce code vous énerve pas trop, j'attend vos suggestions...

n°170354
--greg--
Posté le 03-07-2002 à 11:34:40  profilanswer
 

bah y'a pas gd chose qui se repeterais, si ce n'est la repetition de le declaration du ResultSet, Connection etc, les catch, le finally. mais ça tu y couperas pas de toutes façons.
tu pourrais betement foutre ton code d'execution de requete dans une methode.

n°170374
El_gringo
Posté le 03-07-2002 à 11:49:29  profilanswer
 

--greg-- a écrit a écrit :

bah y'a pas gd chose qui se repeterais, si ce n'est la repetition de le declaration du ResultSet, Connection etc, les catch, le finally. mais ça tu y couperas pas de toutes façons.
tu pourrais betement foutre ton code d'execution de requete dans une methode.
 




 
...Qui rendrait un ResultSet ?
Mais, de toute façon, je pourrais pas inclure le try - catch - finally dedant. ça va pas réduire grand chose en fait.
J'viens d'avoir une idée qui me parait bien :
Chacun de mes beans va implémenter une interface JLdsBean, qui imposera la méthode

Code :
  1. public void setFromResultSet (ResultSet rs)


A ce moment là, je pourrait faire, dans JSQLRequest, une méthode

Code :
  1. public JLdsBean getOneBeanFromDB (JLdsBeans bean, String sqlQuery)


qui ressemblerai à celle que g poste avant, mais ou la 2e partie en gras serait remplacée par un appel à la méthode setFromResultSet.
c pas mal, non !?


Message édité par El_gringo le 03-07-2002 à 11:49:59
n°170380
darklord
You're welcome
Posté le 03-07-2002 à 11:53:29  profilanswer
 

un bean qui prend un resultset beurk.
 
Par contre un bean qui a des méthodes load, save, update ca c'est cool. Et tu peux faire appel à une classe d'utilistaires SQL pour la connection et les autre brols.


---------------
Just because you feel good does not make you right
n°170384
El_gringo
Posté le 03-07-2002 à 11:57:02  profilanswer
 

DarkLord a écrit a écrit :

un bean qui prend un resultset beurk.
 
Par contre un bean qui a des méthodes load, save, update ca c'est cool. Et tu peux faire appel à une classe d'utilistaires SQL pour la connection et les autre brols.




 
Et !? tu mettrais quoi comme paramètre de load ? c cette méthode qui serait chargée des accès BD !? j'croyais qu'y fallait pas faire ça non plus ds un bean.
Tu peut détailler un peu tt ça ?
Et une classe d'utilitaires SQL, genre !? j'vois pas bien ce qu'elle pourrait m'apporter comme utilitaire...

n°170394
darklord
You're welcome
Posté le 03-07-2002 à 12:08:16  profilanswer
 

bin normallement un bean contient toute les infos sur ce que tu veux décrire (un client, un colis, une société). Certains mettent également les méthodes d'accès au bean lui permettant de s'updater, se loader tout seul dans la bd.
 
Comme tout bean a un constructeur vide tu peux faire
 

Code :
  1. ClientBean client = new ClientBean();
  2. client.load(124644567);
  3. // où 124644567 est la clé primaire permettant de retrouver le client
  4. System.out.println("Loaded: "+client.getName());


 
Et pour la classe d'utilitaires c'est par exemple une classe qui te donnerait une instance de Connection sur laquelle tu pourrais déclarer ton statemment etc ...
 
Ainsi tu centralies l'information propre au bean dans le bean. Ceci n'est pas vraiment valalbe si tu veux commencer à sérialiser tes beans (auquel cas le bean doit rester purement un objet contennat des données). Dans ce cas tu dois faire appel à une classe de type helper (ClientBeanHelper) qui fera le job pour toi.
 


---------------
Just because you feel good does not make you right
n°170402
El_gringo
Posté le 03-07-2002 à 12:24:37  profilanswer
 

DarkLord a écrit a écrit :

bin normallement un bean contient toute les infos sur ce que tu veux décrire (un client, un colis, une société). Certains mettent également les méthodes d'accès au bean lui permettant de s'updater, se loader tout seul dans la bd.
 
Comme tout bean a un constructeur vide tu peux faire
 

Code :
  1. ClientBean client = new ClientBean();
  2. client.load(124644567);
  3. // où 124644567 est la clé primaire permettant de retrouver le client
  4. System.out.println("Loaded: "+client.getName());


 
Et pour la classe d'utilitaires c'est par exemple une classe qui te donnerait une instance de Connection sur laquelle tu pourrais déclarer ton statemment etc ...
 
Ainsi tu centralies l'information propre au bean dans le bean. Ceci n'est pas vraiment valalbe si tu veux commencer à sérialiser tes beans (auquel cas le bean doit rester purement un objet contennat des données). Dans ce cas tu dois faire appel à une classe de type helper (ClientBeanHelper) qui fera le job pour toi.
 
 




 
haaa... là t chiant ! Au début, j'avais fait un truc comme ça (méthode load) et tu m'as dit que, non, c'est mauvais, et que je devais pas faire ça. Du coup, j't'ai écouté, g recommencé en sortant les accès BD du bean. Et maintenant tu me dis que c pas bien grave !?

n°170406
darklord
You're welcome
Posté le 03-07-2002 à 12:29:33  profilanswer
 

j'ai dis ca dépend ce que tu veux faire. si tu as présenté ton projet comme utilisant la serialization ou autre, c'est normal que je te l'ai déconseillé. Je connais pas ton projet moi.
 
Et puis si je suis chiant, je ne te réponds plus comme ca le problème est résolu  :kaola:


---------------
Just because you feel good does not make you right
n°170476
El_gringo
Posté le 03-07-2002 à 13:58:40  profilanswer
 

DarkLord a écrit a écrit :

j'ai dis ca dépend ce que tu veux faire. si tu as présenté ton projet comme utilisant la serialization ou autre, c'est normal que je te l'ai déconseillé. Je connais pas ton projet moi.
 
Et puis si je suis chiant, je ne te réponds plus comme ca le problème est résolu  :kaola:  




 
Nooooon, 'faut pas te vexer Darky... mais sur ce coup là, j'étais pas content, comprend moi. :sweat:  
Mais 'faut pas que tu m'laisses, j'ai besoin de toi moi. :D

mood
Publicité
Posté le 03-07-2002 à 13:58:40  profilanswer
 

n°170627
--greg--
Posté le 03-07-2002 à 16:04:42  profilanswer
 

:bounce: spéciale dédicace à Darklord


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Un code plus compact, utilisation d'interfaces (surement)

 

Sujets relatifs
Optimiser le code[Delphi] Marquer un temps d'attente dans le code !
[Delphi] Utilisation de ShellExecute ![VBA] Excel, créer une feuille à la volée et lui affecter du code
exist'il un code speciale pour afficher le sigle euros en HTML??Utilisation de "SecurityManager"
Probleme de code ![MUTEX] difference entre ce bout de code et un mutex
Urgent (Aide sur utilisation de PWS)[Java] utilisation de thread
Plus de sujets relatifs à : Un code plus compact, utilisation d'interfaces (surement)


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)