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 :

Plusieurs problèmes avec base de données


Sujet :

Servlets/JSP Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 219
    Par défaut Plusieurs problèmes avec base de données
    Bonjour, je dois développer un projet web pour un organisme. Etant débutant, cela est d'autant plus difficile que je dois me former en même temps. J'ai donc une classe chargée de récupérer la liste des stagiaires présents actuellement dans l'organisme à partir d'une base mysql:

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    package app;
    import java.sql.*;
     
    public class Stagiaire {
     
    	public Stagiaire(int pid) {
     
    		try {
    			this.database = new Database("localhost","root","","base");
    			Connection connexion = this.database.connect();
    			this.query = connexion.createStatement();
    			this.query.executeQuery("SELECT nom, prenom, datenaissance FROM stagiaire WHERE id = "+pid);
    			ResultSet datas = this.query.getResultSet();
    			if(datas == null) throw new SQLException("Pas de stagiaire correspondant");
    			else {
    				this.id = pid;
    				this.nom = datas.getString(1);
    				this.prenom = datas.getString(2);
    				this.date = datas.getString(3);
    			}
    		}
     
    		catch(ClassNotFoundException e) {
    			System.out.println(e.getMessage());
    		}
     
    		catch(SQLException e) {
    			System.out.println("Erreur: le stagiaire id "+pid+" n'existe pas");
    		}
    	}
     
    	public static Stagiaire [] getList() {
     
    		Stagiaire StagiaireList[] = {null};
    		int i = 0;
     
    		try {
    			Database db = new Database("localhost","root","","base");
    			Connection conn = db.connect();
    			Statement statement = conn.createStatement();
    			statement.executeQuery("SELECT id, nom, prenom, datenaissance FROM stagiaire ORDER BY nom");
    			ResultSet datas = statement.getResultSet();
    			while(datas.next()) {
    				StagiaireList[i++] = new Stagiaire(datas.getInt(1));
    			}
    		}
     
    		catch(ClassNotFoundException e) {
    			System.out.println(e.getMessage());
    		}
     
    		catch(SQLException e) {
    			System.out.println(e.getMessage());
    		}
     
    		return StagiaireList;
    	}
     
    	public int getID() {return this.id;}
    	public String getNom() {return this.nom;}
    	public String getPrenom() {return this.prenom;}
    	public String getDate() {return this.date;}
     
    	private int id;
    	private String nom;
    	private String prenom;
    	private String date;
    	private Database database;
    	private Statement query;
    }
    et une jsp chargée de communiquer avec cette classe:

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@page import="app.*"%>
    <%@page import="java.sql.*"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Administration</title>
    </head>
    <body>
    	<%
            String action = request.getParameter("action");
            if(action != null && action.equals("view")) {
                    int id = Integer.parseInt(request.getParameter("id"));
     
                    Stagiaire stagiaire = new Stagiaire(id);
                    %>
    		Nom: <%= stagiaire.getNom() %>
    		<br />
    		Prénom: <%= stagiaire.getPrenom() %>
    		<%
            
            }
            
            else {
                    Stagiaire [] liste = Stagiaire.getList();
                    if(liste == null) out.println("Aucun stagiaire dans la base de données");
                    else {
                            %>
    			<table class="listeStagiaire" align="center" cellpadding="5" cellspacing="1">
    				<tr>
    					<th class="listeStagiaire" align="center">
    						NOM
    					</th>
    					<th class="listeStagiaire" align="center">
    						PRENOM
    					</th>
    					<th class="listeStagiaire" align="center">
    						DATE
    					</th>
    				</tr>
    			<%
                            
                            for(Stagiaire s : liste) {
                                    if(s != null) {
                                    %>
    				<tr>
    					<td class="listeStagiaire">
    						<%= s.getNom() %>
    					</td>
    					<td class="listeStagiaire">
    						<%= s.getPrenom() %>
    					</td>
    					<td class="listeStagiaire">
    						<%= s.getDate() %>
    					</td>
    				</tr>
    				<%
                                    }
                            }
                            
                            out.println("</table>");
                    }
            }
            
     
            %>
     
    </body>
    </html>
    A l'exécution de cette dernière, le serveur JBoss me renvoit une erreur concernant un débordement de tableau dans la classe ci-dessus à la ligne suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StagiaireList[i++] = new Stagiaire(datas.getInt(1));
    Je ne comprend pas comment il peut y avoir ce débordement. Je sais également qu'il peut y avoir pas mal d'autres erreurs dans mon code. Pouvez vous m'aider svp? Merci.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 442
    Par défaut
    Hello !

    Très simple : tu n'as pas initialisé la taille de ton tableau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Stagiaire StagiaireList[] = {null};
    StagiaireList[1] = ... <= pas bon
    Le problème est que tu ne peux pas connaître le nombre de lignes retournées par un ResultSet à l'avance.

    Je te conseilles de passer plutôt par une Collection :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    java.util.Collection<Stagiaire> stagiaireList = new java.util.LinkedHashSet<Stagiaire>();
     
    while(datas.next()) 
        stagiaireList.add(new Stagiaire(datas.getInt(1)));

  3. #3
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Tu devrais jeter un oeil à la FAQ pour voir comment instancier un tableau.

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 219
    Par défaut
    Merci, j'ai eu un peu de mal à comprendre le principe de fonctionnement des collections mais ça va mieux avec ça. En revanche j'ai toujours des problèmes côté SQL, je traite les exceptions mais le message renvoyé par celles ci se traduit pas "null", ça m'aide pas beaucoup...

    11:02:12,574 INFO [STDOUT] Erreur SQL: null
    11:02:12,945 INFO [STDOUT] Erreur SQL: null
    11:02:13,385 INFO [STDOUT] Erreur SQL: null
    Ma page web:



    Il ne s'agit d'un quelconque problème de mauvais identifiants ou de mauvais paramètres de base: ceci à été vérifié plusieurs fois et la requête qui provient d'un projet en php fonctionnait parfaitement avant...

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 442
    Par défaut
    Voilà perso comment je le ferai :

    Stagiaire :
    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
    31
    32
    public class Stagiaire
    {
    	private Integer id;
    	private String nom;
    	private String prenom;
     
    	public Stagiaire() {}
     
    	public int getId() {
    		return id;
    	}
     
    	public void setId(int id) {
    		this.id = id;
    	}
     
    	public String getNom() {
    		return nom;
    	}
     
    	public void setNom(String nom) {
    		this.nom = nom;
    	}
     
    	public String getPrenom() {
    		return prenom;
    	}
     
    	public void setPrenom(String prenom) {
    		this.prenom = prenom;
    	}
    }
    StagiaireDAO :

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    public class StagiaireDAO
    {
    	public static Stagiaire find(int pid)
    	{	
    		Stagiaire stagiaire = null;
    		Connection conn = null;
    		PreparedStatement stmt = null;
    		ResultSet rs = null;
    		try {
    			// conn = <= obtention de la connexion
    			stmt = conn.prepareStatement("SELECT id, nom, prenom FROM stagiaire WHERE id = ?");
    			stmt.setInt(1, pid);
    			stmt.executeQuery();
    			rs = stmt.getResultSet();
    			if (rs.next()) {
    				stagiaire = new Stagiaire();
    				stagiaire.setId(rs.getInt("id"));
    				stagiaire.setNom(rs.getString("nom"));
    				stagiaire.setPrenom(rs.getString("prenom"));
    			}
    		}
    		catch(SQLException e) {
    			e.printStackTrace();
    		}
    		finally
    		{
    			if (rs != null)
    				try{rs.close();}catch (SQLException e){}
    			if (stmt != null)
    				try{stmt.close();}catch (SQLException e){}
    			if (conn != null)
    				try{conn.close();}catch (SQLException e){}
    		}
    		return stagiaire;
    	}
     
    	public static Collection<Stagiaire> find()
    	{	
    		Collection<Stagiaire> stagiaires = new LinkedHashSet<Stagiaire>();
    		Connection conn = null;
    		Statement stmt = null;
    		ResultSet rs = null;
    		try {
    			// conn = <= obtention de la connexion
    			stmt = conn.createStatement();
    			stmt.executeQuery("SELECT id, nom, prenom FROM stagiaire ORDER BY nom");
    			rs = stmt.getResultSet();
    			while(rs.next()) {
    				Stagiaire stagiaire = new Stagiaire();
    				stagiaire.setId(rs.getInt("id"));
    				stagiaire.setNom(rs.getString("nom"));
    				stagiaire.setPrenom(rs.getString("prenom"));
    			}
    		}
    		catch(SQLException e) {
    			e.printStackTrace();
    		}
    		finally
    		{
    			if (rs != null)
    				try{rs.close();}catch (SQLException e){}
    			if (stmt != null)
    				try{stmt.close();}catch (SQLException e){}
    			if (conn != null)
    				try{conn.close();}catch (SQLException e){}
    		}
    		return stagiaires;
    	}
    }
    Si tu as des questions, n'hésites-pas !

  6. #6
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Dans le while, il manque l'ajout de l'instance de stagiaire dans la collection :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    stagiaires.add(stagiaire) ;

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 442
    Par défaut
    Oups

    Merci c_navy !

Discussions similaires

  1. Problème avec base de données oracle
    Par jonnyboy dans le forum Développement de jobs
    Réponses: 5
    Dernier message: 16/02/2010, 12h10
  2. problème avec base de données attachée
    Par mo5andes dans le forum ASP.NET
    Réponses: 3
    Dernier message: 02/11/2009, 15h26
  3. Réponses: 1
    Dernier message: 19/02/2008, 23h05
  4. svp problème avec base de données
    Par midosone dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 26/03/2007, 10h45
  5. [MySQL] Problème avec base de données
    Par ThAOTh dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 10/08/2006, 13h42

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