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

Langage Java Discussion :

[Runtime.exec] comprends pas


Sujet :

Langage Java

  1. #1
    Rédacteur

    Homme Profil pro
    Geek entrepreneur
    Inscrit en
    Novembre 2004
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Geek entrepreneur

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 224
    Points : 2 373
    Points
    2 373
    Par défaut [Runtime.exec] comprends pas
    Salut,
    Je tente d'utiliser Runtime.exec pour appeler le binaire mysql afin de charger un fichier dans une base de données.

    J'ai tenté toute ces syntaxes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        	String sqlFiles = "H:/workEclipse/project/sql";
    //    	String[] cmd = {MYSQL_PATH , "-h "+ DATABASE_HOST ,  "-u " +DATABASE_LOGIN , "--password="+DATABASE_PASSWORD , "-D "+DATABASE_DB , "< "+ "./test.sql"  }; 
    //    	String[] cmd = {MYSQL_PATH , "-h" , DATABASE_HOST ,  "-u"  ,DATABASE_LOGIN , "--password="+DATABASE_PASSWORD , DATABASE_DB , "<", sqlFiles+"/henna.sql"  }; 
    //    	String[] cmd = {MYSQL_PATH , "-h" , DATABASE_HOST ,  "-u"  ,DATABASE_LOGIN ,"-D", DATABASE_DB , "< "+ sqlFiles+"/henna.sql"  };
    // Et tout en dur... Qui fonctionne dans une fenêtre Dos
        	String[] cmd = {"\"C:/Program Files/wamp/mysql/bin/mysql\" -h localhost -u root --password=xxx -D maBase < H:/workEclipse/project/sql/test.sql"};
    process = runtime.exec(args, null, null);
    Soit j'obtiens l'aide de mysql dans tous les premiers cas, soit j'obtiens une IllegalArgumentException dans le dernier cas ou tout est en dur.

    Cette commande fonctionne par contre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        	String[] cmd = {MYSQL_PATH , "-h" , DATABASE_HOST ,  "-u"  ,DATABASE_LOGIN ,"--password="+DATABASE_PASSWORD ,"-D", DATABASE_DB , "-e","DROP TABLE test"  };
    Mais j'aimerais loader un fichier, donc ca ne me suffit pas.

    Ce serait sans doute le "<" qui n'est pas apprécié ? Quelqu'un a t'il une idée ?

  2. #2
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    En effet, c'est le caractère "<" qui pose problème car ce n'est pas une option valide de mysql. "<" serait interprété par l'interpréteur de commandes Windows (cmd.com ou command.com ?) pour rediriger l'entrée standard de la commande depuis le fichier ./test.sql, mais en l'état tu ne lances pas un interpréteur de commandes mais directement mysql.
    Deux possibilités :
    • placer en tête de la variable String[] cmd le chemin d'accès à command.com, suivi de l'option /c permettant d'exécuter ce qui suit.

    • ouvrir le fichier ./test.sql en lecture et rediriger la sortie du processus Java process (getOutputStream()) sur le descripteur de fichier ouvert.

  3. #3
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Si je me souviens bien l'exec n'est as très pote avec les pipes et redirections.

    As tu essayé de passer par les commandes mysql de chargement d'un fichier genre \. ou source
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String[] cmd = {MYSQL_PATH , "-h" , DATABASE_HOST ,  "-u"   ,DATABASE_LOGIN , "--password="+DATABASE_PASSWORD ,"-D", DATABASE_DB , "-e","source "+sqlfiles+"/henna.sql"  };

  4. #4
    Rédacteur

    Homme Profil pro
    Geek entrepreneur
    Inscrit en
    Novembre 2004
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Geek entrepreneur

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 224
    Points : 2 373
    Points
    2 373
    Par défaut
    La dernière solution est pour unix je suppose (utilisation de source).

    cette solution a fonctionné :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        	String[] cmd = {"c:/WINDOWS/system32/cmd.exe","/c",MYSQL_PATH , "-h" , DATABASE_HOST ,  "-u"  ,DATABASE_LOGIN ,"--password="+DATABASE_PASSWORD ,"-D", DATABASE_DB , "<",sqlFiles+"/test.sql" };

    Mais bon, dans l'idéal j'aimerais faire une solution qui marche sur unix et windows.
    Le mieux serait d'utiliser un parseur sql, de lire le fichier et d'utiliser un connecteur mysql en java. Mais je n'ai trouvé aucun bon parseur sql qui fasse ce que je veux.
    On m'a orienté vers Zql mais celui ci ne gère pas les commandes CREATE
    Je n'ai trouvé aucune grammaire antlr adapté (et la faire moi même, je le sens moyen ^^)

    Bon ben c'est pas si simple de lire un fichier sql et de l'executer en fait ^^

  5. #5
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Dans ce cas précis source est une commande mysql et non unix (bon mysql viens d'un env unix à la base donc ils ont du garder le nom de la commande)

    regardes l'aide mysql quand tu ouvres le client, tu verras la commande source (ou en raccourci \.)
    C'est pour ça que je metsle -e avant

Discussions similaires

  1. [RUNTIME][EXEC]
    Par adrien1977 dans le forum API standards et tierces
    Réponses: 7
    Dernier message: 30/09/2009, 16h28
  2. Runtime.exec ne trouve pas le path du program
    Par *alexandre* dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 22/09/2009, 11h01
  3. Runtime.exec() ne répond pas
    Par anibal dans le forum Général Java
    Réponses: 1
    Dernier message: 27/07/2009, 18h34
  4. sql ne comprend pas mon where!et me demande des parametres
    Par marie10 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 20/04/2004, 11h08
  5. [Rave] un message que je ne comprends pas
    Par Clotilde dans le forum Rave
    Réponses: 2
    Dernier message: 30/09/2003, 21h46

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