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

Servlets/JSP Java Discussion :

Afficher requete sql


Sujet :

Servlets/JSP Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 35
    Par défaut Afficher requete sql
    Bonjour,

    J'effectue une requete sql via une fonction Java. Cette fonction renvoit une JTable. Je voulais savoir s'il était possible de faire afficher une JTable dans une page jsp ou html ?

    Dans le cas contraire, comment peut on faire afficher en tableau une requete sql ?

    Maxime

  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
    A priori, tu pourrais afficher une JTable dans une page HTML par l'intermédiaire d'une applet (mais pas directement).
    Je te suggère de regarder du côté des bibliothèques de composants (Struts-Layout par exemple) qui font ça très bien dans des pages JSP

    http://struts.application-servers.com/doc/fr/index.html

    (un mixe de pager et collection)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <layout:pager width="600" maxPageItems="10" styleClass="pager" sessionPagerId="listFonctionsPageId">
    <layout:collection name="ListeFonctionsForm" property="list" width="600" sortAction="client">
    <layout:collectionItem title="fonction.numero" property="fctNum" sortable="true" width="60" style="text-align:center;" styleClass="column"></layout:collectionItem>
    <layout:collectionItem title="fonction.libelle" property="fctLibelle" sortable="true" styleClass="column"></layout:collectionItem>
    </layout:collection>
    </layout:pager>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 35
    Par défaut
    Bonjour,

    Merci pour les infos même si je ne vois pas comment me servir des Struts Layout. Je suis débutant...

    Est ce que les Struts Layout me permettent d'afficher ma JTable dans html ou est ce sans passer par la JTable ? Si je n'ai pas besoin de la JTable, que doit renvoyer ma méthode Java ?

    Merci pour votre aide.

    Maxime

  4. #4
    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
    Struts Layout ne peut pas afficher de JTable (JTable est un composant Swing, donc Applet ou Application Java) par contre, il te fera un "rendu" genre tableau.
    Il suffit de construire une liste (ArrayList) d'objets (représentant la ligne DB) et de paramétrer les balises <layout:collection ...> et <layout:collectionItem...> pour que tu ais un tableau dans ta page.

    Maintenant, c'est vrai que ça suppose une application struts et ça, c'est plutôt compliqué pour un débutant... donc, plan B.

    Tu peux utiliser directement du code html pour construire un tableau, dans ce 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
     
    <table>
    <tr>
       <th class="header">En-tête 1</th>
       <th class="header">En-tête 2</th>
    </tr>
    <%
    List list = request.getAttribute("maListe");
    for ( int i = 0; i < list.size(); i++ )
    {
       MonObjet monObjet = (MonObjet)list.get(i);
    %>
    <tr>
       <td><%=monObjet.maColonne1()%></td>
       <td><%=monObjet.maColonne2()%></td>
    </tr>
    <% } %>
    Voilà, j'espère que ça t'inspirera...

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

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 35
    Par défaut
    Merci pour ta réponse rapide. Je me dirige vers le plan B.

    Par contre est ce que je peux utiliser une matrice (String[][]) plutôt qu'une liste ?

    Max

  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
    Il n'y a pas de problème, matrice, liste, vecteur... ce que tu veux...
    L'avantage d'une liste (type ArrayList par exemple), c'est qu'à la construction, tu n'as pas besoin de connaître la taille, c'est dynamique (contrairement aux matrices)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 35
    Par défaut
    Merci pour les infos.

    J'arrive à faire afficher un tableau Java dans mon fichier jsp. Par contre ma méthode prenant en paramètre un resultset et renvoyant String[][] ne semble pas fonctionner car le tableau qui apparait est vide (null apparait).

    La méthode toJtable :
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    public static String[][] toJTable(ResultSet toConvert) throws SQLException
    	{
    		//Creation d'un tableau de String comprenant autant de dimensions qu'il n'y a
    		//de colonnes de resultat a la requete.
     
                int nbColonnes=getnbColonnes(toConvert);
                int nbLignes=getnbLignes(toConvert);
     
                int i;
     
    		String[][] columns=new String[nbLignes][nbColonnes];;
     
    				for (i=0;i<nbLignes;i++)
    		{
    			columns[i][0] = toConvert.getMetaData().getColumnLabel(i+1);
    		}
     
     
    		//la methode next() d'un objet resultSet est un boolean qui renvoie false si cet objet ne contient plus aucune ligne a parcourir
    		//note : le curseur est initialement positionne AVANT la premiere ligne du ResultSet. 
    		for (int j=1;j<nbColonnes;j++)
    		{
    		  for (i=0;i<nbLignes;i++)
    			{
    				columns[i][j]=(String) toConvert.getObject(i+1);
     
    			}
    		}
    		return(columns);
    	}
    Méthode qui compte les lignes d'un resultset :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      public static int getnbColonnes (ResultSet resultat) throws SQLException{
                ResultSetMetaData metadata = resultat.getMetaData();
                int nbColonnes = metadata.getColumnCount();
                return nbColonnes;
            }
    Méthode qui compte les colonnes d'un resultset :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      public static int getnbLignes (ResultSet resultat) throws SQLException{
                int compte=0;
                 while(resultat.next()){
                    compte++;
                }
               return (compte/getnbColonnes(resultat));
            }
    Ensuite la méthode toJtable est appelé par getparam :
    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
    19
    20
    21
    22
    23
    public String[][] getParam(String secu, String param) throws SQLException {
     
    		ResultSet resultat = null;
    		// 1- Pour récupérer le parametre en REsultset
    		try{
    			Statement requete = connectionBD.createStatement();
    			resultat=requete.executeQuery("Select " + param +" from Membre where No_Secu = '"+secu+"' ;"
    					);	}
    		catch(SQLException errorSQL){
    		}	
    		// 2- Le convertir en String pour pouvoir s'en servir (l'insérer dans values)
    		 int nbColonnes=getnbColonnes(resultat);
                    int nbLignes=getnbLignes(resultat);
    		String[][]  contenuParam=new String [nbLignes][nbColonnes] ;
                    for (int j=0;j<nbColonnes;j++)
    		{
    		  for (int i=0;i<nbLignes;i++)
    			{
                        contenuParam[i][j] = toJTable(resultat)[i][j];
                      }}
     
    		return contenuParam;
    	}
    C'est getparam qui est appelé dans fichier jsp. J'ai vérifié ma requete sql qui me semble bonne. J'ai également vérifié qu'en rentrant manuellement une matrice String dans getparam, j'arrivais à la faire s'afficher dans le fichier JSP.

    Je pense donc que le souci vient de toJtable. Merci pour votre aide.

    Maxime

  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
    Le problème vient du fait que tu utilises plusieurs fois le même resultSet.
    Pour faire ceci, il faudrait créer le statement comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
    et faire un rs.absolute(1) pour le repositionner au début avant chaque boucle.
    Bref, pas terrible...

    Avec une ArrayList la question du nombre d'enregistrements ne se pose pas.

    Pour ce qui est du nombre de colonnes, il existe le ResultSetMetadata -> rs.getMetaData().getColumnCount() (et une autre boucle de moins )

    Voilà, j'espère que ça t'aidera

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

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 35
    Par défaut
    Bonjour,

    Merci pour les infos : ça fonctionne.

    Par contre à coté de chaque ligne j'ai mis un imput de type checkbox. Par contre j'aurai besoin de retenir dans quel checkbox l'utilisateur clique (position dans mon tableau : i et j) et ensuite de récupérer mon i et j dans une autre page jsp.

    C'est possible ?

    Maxime

  10. #10
    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
    Pas directement, mais rien ne t'empêche d'associer à l'attribut "value" de la checkbox i + "|" + j.
    Comme ça, tu pourras reconstituer ton i et j simplement par un split("|") sur la valeur renvoyée, dans ce 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
    19
    20
     
    PAGE JSP
    =======
    ...
    <input type="checkbox" name="indexMatrice" value="1|1">...
    <input type="checkbox" name="indexMatrice" value="1|2">...
    <input type="checkbox" name="indexMatrice" value="2|1">...
    ...
     
    CODE SERVLET
    ===========
    ...
    String[] indexes = request.getParameterValues("indexMatrice");
    for ( int i = 0; i < indexes.length; i++ )
    {
       String[] ij = indexes[i].split("|");
       int i = Integer.parseInt(ij[0]);
       int j = Integer.parseInt(ij[1]);
       ...
    }
    Voilà... A toi de faire...

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

Discussions similaires

  1. afficher requet sql dans tableau en java
    Par kabbi dans le forum NetBeans
    Réponses: 1
    Dernier message: 12/02/2010, 20h46
  2. Afficher requete sql sur 3 colonnes
    Par fabien14 dans le forum Langage
    Réponses: 4
    Dernier message: 10/12/2008, 09h15
  3. Réponses: 6
    Dernier message: 31/07/2006, 10h18
  4. [SQL] Afficher les données d'une requete SQL
    Par griese dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 22/06/2006, 11h22
  5. Réponses: 20
    Dernier message: 30/05/2006, 13h24

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