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

avec Java Discussion :

erreur SQL Exception pour recuperer ResultSet


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 45
    Par défaut erreur SQL Exception pour recuperer ResultSet
    Bonjour,

    Mon IDE me sort une erreur SQLException: No value specified for parameter 1

    Je ne pense pas avoir fait d'erreur dans mon code mais étant débutant, j'ai plusieurs questions: est il possible de récupérer les valeurs obtenues dans une méthode si la valeur de retour de cette méthode est void?
    Si non, comment faire marcher le code ci-dessous: (a noter que monPatient est déclaré et initialisé en static ailleurs, tt comme mesArrayList hospits et diags)
    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 void findPatient(String name) {
     
    		try {
    			prep = con.prepareStatement("select tab_patient.Nom, tab_patient.Prenom, tab_patient.Sexe, tab_patient.DateNaissance, tab_hospitalisation.DateEntree, tab_hospitalisation.DateSortie, tab_diagnostic.CodeCIM10 FROM (tab_patient INNER JOIN tab_hospitalisation ON tab_patient.NumPatient = tab_hospitalisation.NumPatient) INNER JOIN tab_diagnostic ON tab_hospitalisation.NumHospitalisation = tab_diagnostic.NumHospitalisation"
    					+ " WHERE (DateEntree BETWEEN '2005-02-01' AND '2005-02-31') AND Nom=?;");
    			res = prep.executeQuery();
    			prep.setString(1, name);
    			if(res.first()) {
    				monPatient.setNom(res.getString(1));
    				monPatient.setPnom(res.getString(2));
    				monPatient.setSexe(res.getInt(3));
    				monPatient.setDdn(res.getDate(4));
    			}
    			while(res.next()) {
    				Hospitalisation hospit = new Hospitalisation(null, null);
    				hospit.setDateEntree(res.getDate(5));
    				hospit.setDateSortie(res.getDate(6));
    				hospits.add(hospit);
     
    				Diagnostic diag = new Diagnostic(null);
    				diag.setCodeCim(res.getString(7));
     
    				diags.add(diag);
    			}
    			res.close();
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    	}
    Merci de votre précieuse aide

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 45
    Par défaut
    ah oui précision importante: mon paramètre name est une variable obtenue par un scanner. Voilà pourquoi je laisse name dans prep.setString()

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 45
    Par défaut
    Bon en fait c'est bon j'ai réussi à résoudre la 1ere erreur.

    Par contre, j'ai l'impression que mon programme n'affecte pas de valeurs aux objets à l'interieur de ma fonction... Est à cause du fait que ma fonction return void?
    Le truc, c'est que ce sont des objets de type différents alors comment faire un return avec ça?
    Je vois une possibilité plutôt simple: créer plusieurs fonctions. Mais n'y a t-il pas une façon plus élégante?

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Hello,

    il y a grosso-merdo deux approches :

    #1: créer une classe qui contient les trois autres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class PatientData {
      private final Patient patient;
      private final Hospitalisation hospitalisation;
      private final Diagnostic diagnostic;
      /* Et un constructeur et des getters*/
    }
    #2: faire en sorte que ta classe soit à états.

    En gros, faire en sorte que tu t'en serves comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    PatientFinder patientFinder = new PatientFinder(name);
    Patient patient = patientFinder.find(); // fait la requête et enregistre tous les résultats, mais ne renvoie que le patient
    Hospitalisation hospitalisation = patientFinder.getHospitalisation(); // renvoie l'hospitalisation enregistrée lors de l'appel à find()
    Diagnostic diagnostic = patientFinder.getDiagnostic(); // renvoie le diagnostic enregistré lors de l'appel à find()

    L'idée de faire plusieurs appels et en général bonne, mais si elle t'oblige à faire plusieurs requêtes SQL ce n'est pas efficace.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 45
    Par défaut
    Dacc merci pour la réponse! Je me pencherai sur les 2 solutions qd j'aurai un peu de temps.

    Pour l'instant, j'ai fait plusieurs fonctions et ça marche bien. Mes résultats pour les hospits et les diags sont des ArrayList.
    J'aimerais maintenant présenter ces 2 ArrayList côte à côte (pour l'instant, ils sont l'un en dessous de l'autre).
    Comment faire? A priori un ArrayList à 2 dimensions, mais comment faire ça avec mon code? (surtout que mes 2 ArrayList ont des types différents...)

    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
     
    public static ArrayList<Hospitalisation> findHospit(String name) {
    		ArrayList<Hospitalisation> hospits = new ArrayList<Hospitalisation>();
     
    		try {
    			prep = con.prepareStatement("select tab_patient.Nom, tab_patient.Prenom, tab_patient.Sexe, tab_patient.DateNaissance, tab_hospitalisation.DateEntree, tab_hospitalisation.DateSortie, tab_diagnostic.CodeCIM10 FROM (tab_patient INNER JOIN tab_hospitalisation ON tab_patient.NumPatient = tab_hospitalisation.NumPatient) INNER JOIN tab_diagnostic ON tab_hospitalisation.NumHospitalisation = tab_diagnostic.NumHospitalisation"
    					+ " WHERE (DateEntree BETWEEN '2005-02-01' AND '2005-02-31') AND Nom="+name+";");
    			res = prep.executeQuery();
    			while(res.next()) {
    				Hospitalisation hospit = new Hospitalisation(null, null);
    				hospit.setDateEntree(res.getDate(5));
    				hospit.setDateSortie(res.getDate(6));
    				hospits.add(hospit);
    			}
    			res.close();
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		return hospits;
    	}
     
    	public static ArrayList<Diagnostic> findDiag(String name) {
    		ArrayList<Diagnostic> diags = new ArrayList<Diagnostic>();
     
    		try {
    			prep = con.prepareStatement("select tab_patient.Nom, tab_patient.Prenom, tab_patient.Sexe, tab_patient.DateNaissance, tab_hospitalisation.DateEntree, tab_hospitalisation.DateSortie, tab_diagnostic.CodeCIM10 FROM (tab_patient INNER JOIN tab_hospitalisation ON tab_patient.NumPatient = tab_hospitalisation.NumPatient) INNER JOIN tab_diagnostic ON tab_hospitalisation.NumHospitalisation = tab_diagnostic.NumHospitalisation"
    					+ " WHERE (DateEntree BETWEEN '2005-02-01' AND '2005-02-31') AND Nom="+name+";");
    			res = prep.executeQuery();
    			while(res.next()) {
    				Diagnostic diag = new Diagnostic(null);
    				diag.setCodeCim(res.getString(7));
    				diags.add(diag);
    			}
    			res.close();
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		return diags;
    			}

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 45
    Par défaut
    C'est ok j'ai pu trouver une méthode "trafiquotée": comme mes 2 Array ont exactement la même taille, je peux utiliser un Sys.out dans la même boucle for.
    Mais la bne méthode est sans doute de créer un objet spécifique à mon recueil de données, comme vous me l'avez suggéré!

Discussions similaires

  1. Réponses: 3
    Dernier message: 27/05/2012, 13h25
  2. erreur sql inconnu (pour moi)
    Par kimcharlene dans le forum Requêtes
    Réponses: 5
    Dernier message: 04/12/2006, 20h22
  3. [MySQL] Erreur sql pour inserer des checkbox
    Par digger dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 25/11/2005, 11h06
  4. gerer les ' dans une chaine pour eviter erreur sql
    Par Malone dans le forum Langage
    Réponses: 3
    Dernier message: 24/08/2005, 14h27
  5. [ODBC] erreur SQL pour les unions qui renvoient vide
    Par fabriceMerc dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 25/11/2003, 11h06

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