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 :

Utilisation de ligne de commande Unix en C++ pour la gestion de BD


Sujet :

C++

  1. #1
    Membre averti
    Homme Profil pro
    Dut informatique
    Inscrit en
    Février 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dut informatique

    Informations forums :
    Inscription : Février 2014
    Messages : 20
    Par défaut Utilisation de ligne de commande Unix en C++ pour la gestion de BD
    Bonjour, j'aimerai utiliser des lignes de commande Unix en C++ pour la gestion de BD.
    Je voudrai importer et exporter un BD de phpMyAdmin grâce à la commande dump.
    mysqldump -h host -u user -ppass -rfichier base_de_donnee (exporter)
    mysql -h host -u user -ppass base_de_donnees < fichier_dump (importer)

    Pour les variables j'aimerai comme user et tout, qu'elle prenne celle que j'ai déjà dans mon code donc est ce possible d'écrire un fichier en .sh en le modifiant pour que les variables s’adaptent avec le code en c++ ? Et comment faire pour utiliser du shell en C++.

    Merci d'avance.
    Cordialement.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    en fait tu veux passer une commande console dans du code c++ ?
    Tu peux ou bien passer par une Library qui te permettra de gérer des commandes MySQL (Poco, Qt aussi je crois), ou bien passer directement par le connector C++ de MySQL (http://dev.mysql.com/downloads/connector/cpp/), ou bien passer directement par une commande system:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    const std::string command = "echo 'exit()' | mysql -h localhost -u root -proot";
    system(command.c_str());

  3. #3
    Membre averti
    Homme Profil pro
    Dut informatique
    Inscrit en
    Février 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dut informatique

    Informations forums :
    Inscription : Février 2014
    Messages : 20
    Par défaut
    Merci pour ta réponse.
    Pour le moment j'ai essayé d'écrire la commande dans un fichier.sh du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ifstream fichier("maBase.sh");
        if (fichier){
            fichier << "mysqldump -h " << m_oDB.hostName() << " -u "<< DBUsersName << " -p" << m_oDB.password() << " -" << fichier << " " <<  m_oDB.databaseName() ;
    sytem(fichier);
     
            fichier.close();
        }
    Je sais pas si cela semble correct mais ça me semblait pas mal.

  4. #4
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    La question, c’est surtout :
    - pourquoi tu t’embêtes à créer un fichier ? tu pourrais simplement appeler mysqldump avec les bons paramètres
    - pourquoi tu tiens à faire ça ? pourquoi vouloir faire du c++ pour appeler une commande shell ? (si la réponse est « pour obfusquer le mot de passe », c’est en général une mauvaise réponse, surtout si tu génères un fichier shell derrière ).

  5. #5
    Membre averti
    Homme Profil pro
    Dut informatique
    Inscrit en
    Février 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dut informatique

    Informations forums :
    Inscription : Février 2014
    Messages : 20
    Par défaut
    Non c'est plus complexe que ça derrière c'est un gros projet je veux juste faire une sauvegarde de ma BD des que je fais une maj enfaîte du coup je me suis créer une fonction pour faire une copie de la BD actuel. Du coup des que je lance l'opération en ligne de commande ça appel une fonction update qui doit faire une sauvegarde au début de la BD pour éventuellement faire un rollback plus tard

  6. #6
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Par défaut
    Quel est le souci ?

  7. #7
    Membre averti
    Homme Profil pro
    Dut informatique
    Inscrit en
    Février 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dut informatique

    Informations forums :
    Inscription : Février 2014
    Messages : 20
    Par défaut
    Ben en gros je veux exécuter une ligne de commande en C++ suite à l'appel d'une fonction qui fait une maj mais avant la maj je veux faire une copie de la BD donc je pensais faire comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ofstream fichier ("maBaseCopie.sh");
     
            fichier << "mysqldump -h " << m_oDB.hostName() << " -u "<< DBUsersName << " -p" << m_oDB.password() << " -" << fichier << " " << m_oDB.databaseName() ;
            fichier.close();
            system(fichier);
    Je sais pas si cela est correct

  8. #8
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Par défaut
    As-tu testé ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::system("bash maBaseCopie.sh");
    Comme dit précédemment par Boumbata et white_tentacle, pourquoi passer par un script bash et pas appeler directement la commande ? Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::system(std::string("mysqldump -h " + m_oDB.hostName() + " -u " + DBUsersName + " -p" + m_oDB.password() + " -" + fichier + " " + m_oDB.databaseName()).c_str());

  9. #9
    Membre averti
    Homme Profil pro
    Dut informatique
    Inscrit en
    Février 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dut informatique

    Informations forums :
    Inscription : Février 2014
    Messages : 20
    Par défaut
    En gros je laisse le fichier de coté et je met juste la ligne de commande dans le code en C++ comme tu l'as écris ?

  10. #10
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Par défaut
    Oui (bon la ligne que j'ai écrite est un exemple, j'ai pas testé, même pas sa compilation, mais ça devrait ressembler à ça).

  11. #11
    Membre averti
    Homme Profil pro
    Dut informatique
    Inscrit en
    Février 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dut informatique

    Informations forums :
    Inscription : Février 2014
    Messages : 20
    Par défaut
    Ok merci je vais essayer alors merci encore

  12. #12
    Membre averti
    Homme Profil pro
    Dut informatique
    Inscrit en
    Février 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dut informatique

    Informations forums :
    Inscription : Février 2014
    Messages : 20
    Par défaut
    Bon j'ai essayé en mettant juste la chaine de caractère ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    std::string nomDeDomaine;
        nomDeDomaine =  m_oDB.hostName().toStdString();
        std::string nomDutilisateur;
        nomDutilisateur =  DBUsersName.toStdString();
       std::string mdp ;
        mdp =  m_oDB.password().toStdString();
     
        std::string maCommande ;
        maCommande = ("mysqldump -h " + nomDeDomaine+ " -u " +nomDutilisateur + " -p" + mdp + " > " + "maBaseCopie.sql");
        system(maCommande);
    mais j'ai une erreur avec le system
    /KDataBase.cpp:568: erreur: ne peut convertir ▒ std::string ▒ ▒ ▒ const char* ▒ pour l'argument ▒ 1 ▒ vers ▒ int system(const char*) ▒

    donc si quelqu'un sait comment résoudre cela

    Merci d'avance

  13. #13
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Par défaut
    La signature de std::system est int system(char const *);.
    Tu peux obtenir un char const * depuis un std::string avec la méthode .c_str().
    http://www.cplusplus.com/reference/string/string/c_str/

  14. #14
    Membre averti
    Homme Profil pro
    Dut informatique
    Inscrit en
    Février 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dut informatique

    Informations forums :
    Inscription : Février 2014
    Messages : 20
    Par défaut
    Merci beaucoup à tout le monde de m'avoir aidé

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

Discussions similaires

  1. lancer un programme et l'utiliser en ligne de commande
    Par zz2f3 dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 02/06/2008, 15h41
  2. Un zipeur dé-zippeur, gratuit et utilisable en lignes de commande
    Par belocom dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 19/11/2007, 09h52
  3. Créer un .exe pour utilisation en ligne de commande
    Par Antoun dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 26/01/2007, 13h19
  4. Utiliser une ligne de commande dans mon programme.
    Par Someonelse dans le forum MFC
    Réponses: 3
    Dernier message: 20/06/2006, 16h11
  5. Utilisation en ligne de commande de php ?
    Par JavaAcro dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 13/03/2006, 12h20

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