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

 C Discussion :

Initialiser un tableau => base de donnée mysql/mariaDb


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 211
    Par défaut Initialiser un tableau => base de donnée mysql/mariaDb
    Bonjour à tous,

    Mon petit soucis du jour : j'aimerai récupérer des données données dans une tableau 2d " tableau[i][j] ". Je ne sais comment initialiser mon tableau car je ne connais pas le nombre de ligne que va me donner ma requête à la base de donnée .... Les informations récupérées "row[2]" sont de type binary(64) dans la base de donnée.

    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
    #include <stdio.h>
    #include <errno.h>
    #include <string.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <sys/inotify.h>
    #include <time.h> 
    //mysql
    #include <mariadb/mysql.h>
     
    int main()
    {
     
    MYSQL *conn;
    MYSQL_RES *res;
    MYSQL_ROW row;
     
    char *server = "localhost";
    char *user = "***";
    char *password = "***"; 
    char *database = "TEST";
     
    int row_precedent;
    int i,j = 0;
     
    conn = mysql_init(NULL);
       if (!mysql_real_connect(conn, server,
             user, password, database, 0, NULL, 0)) {
          fprintf(stderr, "%s\n", mysql_error(conn));
          exit(1);
       }  
    	 char insertion[300];
    	 sprintf(insertion, "SELECT * FROM BDtest WHERE temps > %d", (int)time(NULL));
    	 if (mysql_query(conn, insertion)) {
          fprintf(stderr, "%s\n", mysql_error(conn));
          exit(1);
       }
       res = mysql_use_result(conn);
     
       while ((row = mysql_fetch_row(res)) != NULL)
           {
          printf("%s %s %s \n", row[0],row[1],row[2]);
     
    		if(row[1]!=row_precedent)
    		{
    		j=0;
    		tableau[i][j]=row[2];
    		i++;
                    row[1]=row_precedent;
    		} 
     		else
    		{
    		tableau[i][j]=row[2];
    		j++;
    		}
    	}
     mysql_free_result(res);
     mysql_close(conn);	
    //fin connexion mysql	
     
    }
    Merci de votre aide et bon WE

  2. #2
    Membre confirmé Avatar de racine carrée
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 156
    Par défaut
    Bonjour,
    si tu ne connais pas la dimension à l'avance, soit tu utilises un tableau statique dont la taille vaut le maximum de la longueur possible des données (mais ce n'est pas forcément une bonne solution), soit tu utilises un tableau dynamique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #include <vector>
    vector<type_donnée> tableau(longueur_tableau); //longueur_tableau est int (et non un const int)
    Bon courage.

  3. #3
    Membre confirmé Avatar de racine carrée
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 156
    Par défaut
    Ici ce sera donc le type vector<vector<string>> qu'il faudra utiliser (si les données à rentrer dans le tableau sont des chaines de caractère).

  4. #4
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 774
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 774
    Par défaut
    Citation Envoyé par racine carrée Voir le message
    soit tu utilises un tableau dynamique
    Citation Envoyé par racine carrée Voir le message
    Ici ce sera donc le type vector<vector<string>> qu'il faudra utiliser (si les données à rentrer dans le tableau sont des chaines de caractère).


    Cela n'existe pas en C - en C++ oui avec std::vector et std::string (<- liens cplusplus.com en anglais)

    il faut y aller à coup de malloc/ realloc (<- liens cplusplus.com en anglais)

    Pour un exemple, regarde la structure t_list_keys et la fonction list_keys_add_one_key dans mon code dans ce fil de discussion (<- lien)

  5. #5
    Membre confirmé Avatar de racine carrée
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 156
    Par défaut
    Ah désolé j'avais pas fait gaffe qu'on était en C 😂.
    Du coup y a moyen d'utiliser des listes chainées (pour manipuler le tableau on manipule le pointeur du premier élément du tableau, chaque élément du tableau contient l'élément qu'on veut y mettre + un pointeur vers l'élément suivant, le dernier élément contient un pointeur null en plus de l'élément qu'il doit contenir, pour indiquer qu'on est arrivé à la fin du tableau).

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par défaut
    Est-ce que tu comptes récupérer de très larges sets de données ?
    Si non, utilise mysql_store_result puis mysql_num_rows.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  7. #7
    Membre confirmé Avatar de racine carrée
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 156
    Par défaut
    Voici un petit exemple de liste chainée pouvant contenir des chaines de caractères (de 300 caractères max, comme il semble que cela soit nécessaire dans ton code source).
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    typedef struct elem elem;
    typedef char valeur[300];
    typedef struct elem{
        valeur chaine;
        elem* suivant;
    } *tableau, *Pelem;
     
    tableau ajoute(tableau tab,valeur chaine){
        if(tab){
            tab->suivant=ajoute(tab->suivant,chaine);
        } else {
            tab = malloc(sizeof(elem));
            strcpy(tab->chaine,chaine);
            tab->suivant=NULL;
        }
        return tab;
    }
     
    void affiche(tableau tab){
        if(tab){
            printf("adresse: %i\n",tab);
            printf("%s\n",tab->chaine);
            printf("adresse suivant: %i\n",tab->suivant);
            affiche(tab->suivant);
        }
    }
     
    int main()
    {
        tableau tab=NULL;
        tab=ajoute(tab,"ligne 1");
        affiche(tab);
        printf("\n\n");
        tab=ajoute(tab,"ligne 2");
        affiche(tab);
        return 0;
    }
    Pour l'adapter à ton cas il faudrait avoir un tableau de tableaux de chaines de caractères, donc je pense qu'un moyen pourrait être de créer une liste chainées contenant des pointeurs vers des tableau (de type tableau dans ce code source), et ensuite de créer les fonctions qui vont bien pour récupérer une élément du tableau quand nécessaire.
    Bon courage...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Importation d'un tableau Excel vers une base de données mysql
    Par Glork dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 25/07/2013, 21h32
  2. [JDBC]acces à une base de données mysql
    Par sehaba dans le forum JDBC
    Réponses: 13
    Dernier message: 07/12/2004, 00h39
  3. probleme construction base de donnes MySql...Help
    Par chakan dans le forum Requêtes
    Réponses: 7
    Dernier message: 21/07/2004, 11h27
  4. connection à base de donnée MYSQL
    Par zouzou_zaza dans le forum Bases de données
    Réponses: 11
    Dernier message: 04/07/2004, 12h31
  5. XML->Base de donnée Mysql
    Par lheureuxaurelie dans le forum XQUERY/SGBD
    Réponses: 4
    Dernier message: 10/03/2004, 23h47

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