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 :

Requête de récupération ligne par ligne


Sujet :

JDBC Java

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 10
    Points : 0
    Points
    0
    Par défaut Requête de récupération ligne par ligne
    Bonjour à tous,

    Comme l'indique le titre de mon sujet, je suis en train d'essayer de réaliser une requête permettant de récupérer une ligne d'une table en fonction du numéro de cette ligne.

    Je vous explique le contexte : j'ai une table "capteur" dans laquelle se trouve les champs "id_capteur", "ip_capteur", "type" etc..

    Un de mes camarades doit, lorsque il utilisera ma fonction, pouvoir entrer la ligne numéro 2 par exemple, et obtenir l'id, l'ip, et le type.

    J'ai déjà réalisé par mal de requêtes (insertion de nouveau capteurs, suppression, affichage du nombre de capteur, changement de valeurs etc..) mais celle ci me pose problème, je n'ai pas vraiment d'idée de départ, et je me demande par quel moyen il est possible de "cibler" une ligne désirée pour l'afficher..

    Je vous remercie d'avance des éventuelles pistes que vous pourrez me fournir

  2. #2
    Membre averti
    Homme Profil pro
    Java
    Inscrit en
    Mai 2011
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 170
    Points : 444
    Points
    444
    Par défaut
    Connais-tu vraiment ce qu'est le SQL ?

    Exemple ta table capteur contient ceci :

    id_capteur | ip_capteur | type

    1 192.168.1.42 type_1
    2 192.168.1.43 type_2
    ...


    Simple requête pour recevoir la ligne 2 :

    SELECT *
    FROM capteur
    WHERE id_capteur = 2;

    Attention, la colonne id_capteur doit être la clef primaire de cette table pour que ça fonctionne, car s'il y a plusieurs fois l'id_capteur à 2, tu auras en retour une liste ;-)

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 10
    Points : 0
    Points
    0
    Par défaut
    Cette fonction de récupération en fonction de l'id est déjà fonctionnelle, maintenant j'essaye de récupérer une ligne en fonction de la ligne elle même

    Exemple : la ligne 2 de ma table contient le capteur ayant l'id numéro 4, l'ip 192.168.1.1 et le type capteur de pression,

    J'aimerais que je puisse récupérer les valeurs en choisissant la ligne et non l'id du capteur.

    Désolé j'ai du mal m'exprimer dans mon premier post ^^

    Et oui je connais un peu le SQL, j'ai déjà quelques requetes à mon actif, je suis en projet dessus ^^'

    Merci de ta réponse

  4. #4
    Membre émérite
    Avatar de olivier.pitton
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2012
    Messages
    355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 355
    Points : 2 814
    Points
    2 814
    Par défaut
    Plop,

    Tu peux utiliser les RowID qui sont les identifiants de ligne (si j'ai bien compris ton problème).

    Je ne connais pas très bien le fonctionnement de ceux-ci, donc je t'invite à lire cette doncumentation officielle ici.

  5. #5
    Membre averti
    Homme Profil pro
    Java
    Inscrit en
    Mai 2011
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 170
    Points : 444
    Points
    444
    Par défaut
    Citation Envoyé par Zheis Voir le message
    Cette fonction de récupération en fonction de l'id est déjà fonctionnelle, maintenant j'essaye de récupérer une ligne en fonction de la ligne elle même

    Exemple : la ligne 2 de ma table contient le capteur ayant l'id numéro 4, l'ip 192.168.1.1 et le type capteur de pression,

    J'aimerais que je puisse récupérer les valeurs en choisissant la ligne et non l'id du capteur.

    Désolé j'ai du mal m'exprimer dans mon premier post ^^

    Et oui je connais un peu le SQL, j'ai déjà quelques requetes à mon actif, je suis en projet dessus ^^'

    Merci de ta réponse
    C'est bête à dire mais l'utilisation du numéro de la ligne est vraiment déconseillé, ce n'est pas du tout maintenable ...

    Si tu est obligé de passé par ce principe, c'est qu'il y a un problème au niveau de ton architecture et de la conception.

    Sinon oui le RowId, RowNum en fonction de la DB sur laquelle tu es.

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 10
    Points : 0
    Points
    0
    Par défaut
    Merci pour vos réponses

    Pourquoi j'ai besoin de travailler par ligne : Imaginons que je crée 3 capteurs, d'ID 1, 2 et 3 sur les lignes 1, 2 et 3 de ma base.

    Si je supprime le capteur 2, il me restera le capteur 1 et 3, mais sur les ligne 1 et 2, donc les id ne correspondront pas, c'est juste ça mon soucis.

    Étant dans un groupe de projet, je m'occupe de fournir à mes camarades les requêtes qu'ils me demandent, donc je me plie un peu à leurs demandes

    Et Olivier, tu as bien compris ce que je recherchais il me semble, je vais fouiller un peu ça, merci

  7. #7
    Membre averti
    Homme Profil pro
    Java
    Inscrit en
    Mai 2011
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 170
    Points : 444
    Points
    444
    Par défaut
    Et quel est l’intérêt d'avoir des id qui correspondent aux numéros de lignes ?

  8. #8
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 8
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    Fais une petite recherche sur la fonction RANK (), je pense qu'elle pourra t'en être utile.

  9. #9
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    Par défaut
    Serieusement, évite les rowid et autres tu n'auras que des incohérence lorsque comme tu le dis si bien tu supprimes, ajoute des éléments dans la table.

    Kinesthesia a entièrement raison, tu dois avoir un problème qu'il faut résoudre et non "patché" a la va vite pour s'en sortir a moins que tu n'aies envies de t'arracher les cheveux plus tard
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

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

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 10
    Points : 0
    Points
    0
    Par défaut
    Bien, je vais essayer de convaincre mon groupe de projet de trouver une autre solution, moi je ne suis que la personne qui gère la base de données et leur fournit les requêtes qu'ils me demandent, donc je sais pas si j'arriverais à leur faire changer d'avis

    Merci de vos réponses, je vous tiens au courant d'une éventuelle solution alternative trouvée

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 10
    Points : 0
    Points
    0
    Par défaut
    Bon, finalement nous avons décidé de passer par l'affichage d'un tableau qui montre toute la table, qui sera récupéré par mon camarade qui sélectionnera uniquement ce dont il a besoin.

    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
    public static String[] select(int idCapteur) throws SQLException
    	{
    		ResultSet result = state.executeQuery("SELECT * FROM capteur WHERE id_capteur="+idCapteur);
    		if(result.next())
    		{
    			ResultSet result1 = state.executeQuery("SELECT * FROM capteur WHERE id_capteur="+idCapteur);
    			ResultSetMetaData resultMeta = (ResultSetMetaData) result1.getMetaData();
    			int NbrColonneR=resultMeta.getColumnCount();
    			while(result1.next())
    			{
    				for(int n=1;n<NbrColonneR+1;n++)
    				{
    	              capteur[i]=result1.getString(n);
    	              i++; 
    				}
    				i=0;
    			}
     
    		}
    	    else
    	    {
     
    	    	capteur[0]="E";
    	    }
    	     /* for(int m=0;m<9;m++){
    	      System.out.println(capteur[m]);	
    	      }*/
     
    	 return capteur;
     
    }
    Cette manière de procéder arrange tout le monde, donc tant mieux ^^
    Merci

  12. #12
    Membre averti
    Homme Profil pro
    Java
    Inscrit en
    Mai 2011
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 170
    Points : 444
    Points
    444
    Par défaut
    Pourquoi les deux requêtes identiques ?

  13. #13
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 10
    Points : 0
    Points
    0
    Par défaut
    La première (en dehors du if) permet de voir si le capteur que l'on demande existe, sinon, on renvoit la lettre "E" comme erreur pour signaler que non.

    La deuxième ne se fait que si elle existe, pour ensuite afficher ce que l'on souhaite sous forme de tableau.

  14. #14
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    Par défaut
    kinaesthesia as souligné un bon point, car tu n'as pas besoin de faire 2 fois la requête, une seule fois suffit.

    Ce qui serait équivalent :

    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
    public static String[] select(int idCapteur) throws SQLException
    	{
    		ResultSet result = state.executeQuery("SELECT * FROM capteur WHERE id_capteur="+idCapteur);
    		if(result.next())
    		{
    			ResultSetMetaData resultMeta = (ResultSetMetaData) result.getMetaData();
    			int NbrColonneR=resultMeta.getColumnCount();
    			do
    			{
    				for(int n=1;n<NbrColonneR+1;n++)
    				{
    	              capteur[i]=result.getString(n);
    	              i++; 
    				}
    				i=0;
    			}
                                                    while(result.next());
     
    		}
    	    else
    	    {
     
    	    	capteur[0]="E";
    	    }
    	     /* for(int m=0;m<9;m++){
    	      System.out.println(capteur[m]);	
    	      }*/
     
    	 return capteur;
     
    }
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

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

  15. #15
    Membre averti
    Homme Profil pro
    Java
    Inscrit en
    Mai 2011
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 170
    Points : 444
    Points
    444
    Par défaut
    Citation Envoyé par Zheis Voir le message
    La première (en dehors du if) permet de voir si le capteur que l'on demande existe, sinon, on renvoit la lettre "E" comme erreur pour signaler que non.

    La deuxième ne se fait que si elle existe, pour ensuite afficher ce que l'on souhaite sous forme de tableau.
    Inutile ...

    Une seule requête est suffisante tu sais ?

  16. #16
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 10
    Points : 0
    Points
    0
    Par défaut
    Exact, modification effectuée

Discussions similaires

  1. Requête ligne par ligne
    Par jessy2020 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 12/09/2011, 12h13
  2. Réponses: 8
    Dernier message: 04/07/2011, 14h16
  3. Réponses: 6
    Dernier message: 07/05/2009, 09h32
  4. Calcul ligne par ligne sur le résultat d'une requête
    Par CanardJM dans le forum Langage SQL
    Réponses: 5
    Dernier message: 15/04/2008, 13h06
  5. Récupération du corps d'un mail ligne par ligne ?
    Par Zebulon777 dans le forum VBA Outlook
    Réponses: 5
    Dernier message: 26/03/2008, 10h43

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