IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement Web en Java Discussion :

Où stocker des requêtes SQL ?


Sujet :

Développement Web en Java

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 139
    Par défaut Où stocker des requêtes SQL ?
    Bonjour,


    Je voudrais avoir votre avis et vos conseils sur quelque chose que je n'ai jamais fait et qui traite sur le stockage de requêtes SQL.
    Je travaille sur une application JEE qui possède une architecture pour moi assez complexe et que j'ai comme devoir d'optimiser.

    Dans cette application, les requêtes SQL sont toutes stockées dans la base de données du serveur applicatif. Ce qui fait que pour effectuer des recherches et des traitements sur les BD, l'application doit tout d'abord accéder à la BD pour remonter la bonne requête, pour ensuite retourner dans la BD pour effectuer la requête remontée.. C'est le "serpent qui se mord la queue" comme on me l'a si bien dit

    J'ai donc dans l'idée de placer ces requêtes "dans" l'appli pour que les accès soient moins longs.

    Question : Où stocker ces requêtes ? Directement dans le code ? Dans un fichier ? Si oui quel genre de fichier ?

    Je précise que l'appli possède un EJB entièrement consacré aux accès à la BD et qui a comme rôle par exemple d'aller chercher des requêtes, de faire les connexions, etc... Donc il faudra de toutes manières que je modifie cet EJB en fonction de ce que je vais faire.

    Dans la table qui contient les requêtes, il y a 2 colonnes, une qui contient la requête à proprement parlé et une autre qui est le nom de cette requête.


    Merci d'avance pour vos réponses !

  2. #2
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    1. Combien y-a-t-il de requêtes ?
    2. Qui s'occupe de leur maintenance (création/modification) ?

    S'il y a beaucoup de requêtes et/ou on doit souvent les modifier
    alors il faudra probablement les laisser en base de données
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 139
    Par défaut
    1. Dans la table il y a 100 lignes. Mais dans ces 100lignes, il y a certaines ligne qui sont des "parties" de requêtes. Par exemple :

    REQ_SELECT_NUM : Select x from y where o=p
    REQ_SELECT_NUM : And u=m
    REQ_SELECT_NUM : And n=d

    Il y a donc 3 lignes qui possèdent le même nom. La première ligne est la "base" de la requête, tandis que les autres lignes ne sont que les compléments si besoin.
    Donc au final je dirais qu'il y a 70 requêtes dans la table. Les 30 autres sont les compléments.

    2. En fait, logiquement c'est le responsable SI qui s'occupe de la maintenance, mais depuis sa création en 2008, rien n'a été rajouté ni modifié dans l'appli. Et ça compte pas l'être dans le futur.

  4. #4
    Membre très actif Avatar de goute
    Homme Profil pro
    Développeur éclectique
    Inscrit en
    Novembre 2008
    Messages
    224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur éclectique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2008
    Messages : 224
    Par défaut
    Tu les laisses dans la bdd, tu les charges à l’exécution de l'application, puis tu les enregistres dans une variable de session. Comme ça tu ne fais qu'un seul accès a la bdd.

  5. #5
    Membre Expert
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Par défaut
    pour ma part, j'irai mettre tout ça dans un fichier de properties ou encore dans un fichier XML mis dans WEB-INF ou dans META-INF.

    vu tes contraintes sur les "noms identiques" j'opterais pour un fichier XML genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?xml version="1.0" encoding="UTF-8" ?>
    <liste-requetes>
       <requete id="truc-muche">
           <base>Select x from y where o=p</base>
           <complement>And u=m</complement>
           <complement>And n=d</complement>
       </requete>
      .. etc ..
      .. etc ..
    </liste-requetes>
    Le tout parsé en DOM ou en JDOM.


    mais surtout pas en base de données ...

  6. #6
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Pour ne pas tout remonter "à la main" dans le code,
    tu peux, au moment où l'application est lancée, charger toutes tes
    requêtes dans un Map ou un Arraylist (en mémoire donc + rapide)
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  7. #7
    Membre Expert
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Par défaut
    Citation Envoyé par fxrobin Voir le message
    Le tout parsé en DOM ou en JDOM.
    il était évident dans ma réponse que le DOM doit être conservé en mémoire et pas parsé à chaque fois, ce qui revient à une Map ou une List en mémoire

  8. #8
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Eh bien c'est une belle unanimité ! tout le monde est d'accord sur le principe
    de charger les requêtes en mémoire !

    Il ne te reste plus qu'à choisir la forme qui te conviens le mieux
    (variable de session, Map, List, etc...)
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  9. #9
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 139
    Par défaut
    Merci beaucoup pour toutes vos réponses !!

    Je pense qu'une Map pourrait faire l'affaire non ? Une clé (nom), une valeur (requête) A moins que ça soit trop lourd pour juste ce que j'ai à faire ?

    Donc si je résume, je fais mon XML, je parse une seule fois au lancement de l'appli (avec JDOM qui a l'air trèèèèèès sympathique http://cynober.developpez.com/tutoriel/java/xml/jdom/ ) et ensuite je retrouve mes requêtes comme je veux

    Par contre il faut que je modifie mon EJB Connexion Factory qui possède des méthodes du genre ArrayList<String> selectPart(nom_de_requete) qui ont pour rôle par exemple de remonter les requêtes, etc.... Mais là en fait j'aurais juste à chercher dans le XML au lieu de chercher dans la bdd si je comprends bien !


    En plus cette méthode selectPart je l'ai mise en cache actuellement donc elle serait toujours mise en cache ça n'y changerait rien

  10. #10
    Membre Expert
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Par défaut
    Citation Envoyé par VinceSSJ Voir le message
    Je pense qu'une Map pourrait faire l'affaire non ? Une clé (nom), une valeur (requête) A moins que ça soit trop lourd pour juste ce que j'ai à faire ?
    le problème de la Map (et aussi son avantage) c'est une clé, une valeur ...
    or tu as écris plus haut : une clé, plusieurs valeurs ... voilà pourquoi je t'ai orienté vers une Structure XML parsée avec JDOM :

    Facilement maintenable (fichier texte), et analysable (parsing) ultra facile.

    sinon si tu veux une clé, et plusieurs valeurs, tu as la "MultiMap" du projet Apache Commons :

    http://commons.apache.org/collection.../MultiMap.html

  11. #11
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 139
    Par défaut
    Ah mais oui où ai-je la tête !!!!!!! En plus j'avais eu exactement le même problème avec une autre manip'

    Oui donc Map je laisse de côté.

    je pense vraiment utiliser JDOM qui me parait facile à mettre en place, mais maintenant le truc c'est comment mettre en mémoire ce qui aura été parsé justement..
    Est ce que les JDOM consomme beaucoup de ressources (du moins plus qu'une ? Si non alors ça vaudrait peut être pas le coup de mettre en mémoire, si ?

  12. #12
    Membre Expert
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Par défaut
    tu gardes le JDOM en mémoire avec "static" ou un Singleton (ce qui au final revient au même). JDOM conserve une hierarchie d'objets en mémoire, issus du parsing du fichier XML.

  13. #13
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 139
    Par défaut
    En effet un static devrait faire l'affaire

    Par contre pourquoi mettre le XML dans WEB-INF ou META-INF, est ce que ça ne suffirait pas de le mettre directement dans le jar des EJB ?

  14. #14
    Membre Expert
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Par défaut
    si si, biensûr.

    Et tu le récupères un InputStream dessus avec un getResourceAsStream

  15. #15
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 139
    Par défaut
    Ah je me disais aussi

    Pourquoi un InputStream ? Pour utiliser le JDOm dans mes EJB ?
    Ce que je veux c'est juste le lire, dans la doc que j'ai postée au dessus ils se servent juste d'un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document = sxb.build(new File("Exercice2.xml"));
    pour parser et ensuite y'a juste à récupérer les éléments avec un iterator qui parcourt la liste


    Sinon j'ai commencé à créer mon fichier xml. En fait j'ai plusieurs colonnes dans la BD donc j'ai adapté en fonction
    Du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <liste-requetes>
       <requete id="REQ_BDGDP_DDEB">
           <liste-parties>
                <partie>
                    <string>Select t.idTache, t.tid, t.labo, t.etude, t.dateDeb, t.duree, t.libelle, t.dateInit, t.dureeInit, t.annotation, t.technicien, t.libelleInit, t.derniereModif, t.modifPar From Tache t Left Outer Join Periode p On (t.idPeriode = p.idPeriode) Where t.dateDeb >= ? And t.dateDeb < ? And p.niveau = ? </string>
                    <ordre>1</ordre>
                    <reqdesc></reqdesc>
                </partie>
                <partie>
                    <string>t.labo</string>
                    <ordre>2</ordre>
                    <reqdesc></reqdesc>
                </partie>
           </liste-parties>
       </requete>
        etc...
        etc...
    </liste-requetes>

  16. #16
    Membre Expert
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Par défaut
    le getResourceAsStream te permet d'aller chercher un fichier contenu dans l'EJB JAR ou dans le META-INF.

    Si tu fais avec "File()" tu devras fournir le chemin complet ... et donc ça va dépendre du déploiement ... donc voilà pourquoi on fait avec "getResourceAsStream"

  17. #17
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 139
    Par défaut
    Très bien merci je n'avais pas vu ça comme ça effectivement
    Par contre, quand je vais utiliser ma méthode selectPart(requete), la méthode va appeler une méthode de ma classe JDOM pour chercher la requête dans le fichier XML. Cette recherche n'est qu'une "simple" boucle qui parcours le xml parsé avec un iterator.
    Mai justement cette recherche, coute t'elle moins en termes de ressources qu'une recherche dans la base de données ?

    Dans tous les cas, une fois la recherche effectuée, la requête trouvée dans le xml est placée dans le cache

    Mais je demande surtout pour les méthodes non cachées..

  18. #18
    Membre Expert
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Par défaut
    oui ça coûte moins cher !

    mais je te conseille d'aller piocher les informations dans le JDOM avec des requêtes XPATH ce qui t'évitera de faire des parcours en boucle et le tout sera bien optimisé :

    http://zedros.developpez.com/tutoriels/java/xml/xpath/

  19. #19
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 139
    Par défaut
    Ok merci je vais voir tout ça ! Surtout que le XPATH j'ai tâté ça cette année en cours

  20. #20
    Membre Expert
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Par défaut
    Citation Envoyé par VinceSSJ Voir le message
    Ok merci je vais voir tout ça ! Surtout que le XPATH j'ai tâté ça cette année en cours
    c'est ce qui s'appelle "monter en expertise"

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Structure] Stocker des requêtes SQL
    Par clisson dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 05/12/2006, 13h45
  2. Fabriquer des requêtes sql à partir d'un document xml
    Par ktel dans le forum XQUERY/SGBD
    Réponses: 4
    Dernier message: 18/10/2005, 16h45
  3. [MFC] comment écrire des requêtes SQL
    Par kitsune dans le forum MFC
    Réponses: 9
    Dernier message: 27/09/2005, 15h23
  4. Journal des requêtes SQL effectuées
    Par Kcirtap dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 18/07/2005, 09h58
  5. Recherche ibrairie pour éxécuter des requêtes SQL via C++
    Par daemon dans le forum Choisir un environnement de développement
    Réponses: 5
    Dernier message: 14/06/2004, 10h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo