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

JDBC Java Discussion :

jdbc : séparer le code sql du code java


Sujet :

JDBC Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 169
    Par défaut jdbc : séparer le code sql du code java
    Bonjour à tous !

    Je développez une application batch java, ainsi qu'une application web JSF avec des accès JDBC dans les deux cas.
    Afin de séparer le code SQL du code JAVA, j'aimerais disposer les requetes dans un fichier à part.

    Mais je ne sais pas comment m'y prendre .... Y a t-il des solution standards ?

    Dois je les mettre dans un fichier properties ?

    Merci de vos réponses et je vous souhaite une bonne journée.

    Laurent

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    JDBC n'est pas conçu pour séparer ces 2 choses dans la mesure où l'application aura besoin de "savoir" comment est constitué la requête (paramètres, types etc).
    Donc, hormis les requêtes sans paramètres et donc en lecture seule, le couplage est fort.

    Il serait plus judicieux de créer une couche de "services" commune à tes 2 types d'utilisation et normalisée.

    En termes d'outils, il y a hibernate qui t'épargne une partie du travail.
    C'est plutôt top, mais ça suppose une prise en main relativement conséquente...

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 169
    Par défaut
    Merci beaucoup de ta réponse.
    En effet, je comprends ce que tu dis.
    Je connais Hibernate, mais dans mon cas son utilisation n'est pas préconisé (règles de développement strictes ....)

    Merci encore, et je te souhaite une bonne journée.

    LAurent

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    961
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 961
    Par défaut
    La solution que j'ai vu le plus souvent consiste à écrire le code SQL dans des constantes publiques. Le code Java effectuant l'appel SQL ne contient aucun code SQL mais uniquement la constante.
    Dans certains cas, les constantes faisaient partie de la classe concernée. Dans d'autres, elles étaient regroupées dans une classe unique.

  5. #5
    Membre Expert
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Par défaut
    Bonjour,

    Il est possible d'externaliser les requêtes (même avec paramètres) dans un fichier grâce à l'api DBUtils de Jakarta.

    @+


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    OK, on peut externaliser, mais même avec DBUtils, tu es obligé de connaître le nombre de paramètres (et leur type)...
    Tu peux tout aussi bien externaliser la chaîne "select * from Table where ID=?" dans un fichier de propriétés, utiliser un PreparedStatement et ajouter le paramètre... DBUtils n'apporte pas grand chose de plus...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre Expert
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Par défaut
    Existe-t-il un moyen de faire une requête sans connaitre le nombre de ses paramètres ou leurs types ?


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  8. #8
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Je te l'accorde, d'où l'intéret de mettre ça dans une classe pour la mise en commun...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 143
    Par défaut
    D'après le tuto sur DButils, je vois ce qu'il faut faire. en tout cas j'ai réussi à reproduire ce qui est fait dans le tuto, à savoir la récupération d'un seul enregistrement avec un requête avec un seul paramètre.

    Sauf je cherche à lancer une requête avec plusieurs paramètres et qui renvoie plusieurs résultats !

    Pour plusieurs paramètres, j'ai essayé de passer un tableau de string
    et pour gérer les resultats retournés, je ne sais pas quel type d'objet choisir à la place du ArrayHandler.

    et après naviguer dans ces résultats...

    merci pour votre aide.

    le code en question :

    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
     
    //utilisation d'une requête à paramètre depuis le mapQuery
    		//utilisation d'un ArrayHandler car il n'y a qu'un résultat
    		Object reponse[] = new Object[3];
    		String param="14";
    		try {
    			reponse =
    				(Object[]) qRunner.query(
    					conn,
    					(String) mapQuery.get("param"),
    					param,
    					new ArrayHandler());
    		} catch (SQLException e3) {
    			e3.printStackTrace();
    		}

  10. #10
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Bah t'as qu'à faires des procédures stockées si tes normes le permettent.
    De ce fait pas de code SQL en java.
    Puis de plus tu peux également faire de l'introspection au niveau des paramètres de la proc ainsi que deviner leur type au moyen des DatabaseMetaData.
    ++

Discussions similaires

  1. ajouter un script .sql à mon code JAVA
    Par samia004 dans le forum JDBC
    Réponses: 9
    Dernier message: 13/07/2010, 16h04
  2. Création BD Access Code SQL pour relation 1-1 ?
    Par colorid dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 26/10/2005, 16h42
  3. Réponses: 7
    Dernier message: 12/09/2005, 11h05
  4. [IB6] Code SQL.
    Par qi130 dans le forum SQL
    Réponses: 1
    Dernier message: 21/02/2005, 12h21
  5. Récupérer le code SQL à partir d'une requête
    Par Edith_T dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 23/11/2004, 14h10

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