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 :

Chemin d'accès au répertoire de MySQL


Sujet :

JDBC Java

  1. #1
    Membre actif Avatar de Tanebisse
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 449
    Points : 260
    Points
    260
    Par défaut Chemin d'accès au répertoire de MySQL
    Bonjour,
    Pour un export de base MySQL je souhaite copier l'ensemble du répertoire "D:\Program Files\MySQL\MySQL Server 5.0\data\Ma_base". Est-il possible de récupérer en Java le chemin d'accès à ce répertoire ? L'appli étant installé sur des postes différents la config pourrait changer.

  2. #2
    Membre chevronné
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Points : 1 787
    Points
    1 787
    Par défaut
    Salut !

    Non, aucun moyen de connaître "en runtime" l'endroit où MySQL est installé ...
    Une petite question : pourquoi ne pas faire un dump de la base plutôt que de copier sauvagement le répertoire (ce qui n'est en plus pas 100% garanti si la base tourne). ?

  3. #3
    Membre actif Avatar de Tanebisse
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 449
    Points : 260
    Points
    260
    Par défaut
    Ah bah si tu peux m'expliquer comment faire un dump de la base en JAVA moi je suis partant !

  4. #4
    Membre chevronné
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Points : 1 787
    Points
    1 787
    Par défaut
    Pour faire le dump de MySQL depuis Java, le plus simple, si tu maîtrises l'OS sur lequel ton appli est installée, est d'embarquer le binaire mysqldump.
    Attention pour l'appeler depuis Java, je te conseille d'utiliser l'API d'Adiguba (recherche shell.jar sur développez).

    N'hésite pas à demander si tu as besoin de plus de précisions ...

  5. #5
    Membre actif Avatar de Tanebisse
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 449
    Points : 260
    Points
    260
    Par défaut
    Dans un premier temps j'ai essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Runtime.getRuntime().exec("D:/Program Files/MySQL/MySQL Server 5.0/bin/mysqldump.exe --user=root password=root mathis > dump_mathis2.sql");
    Mais ça ne fonctionne pas. C'est normal pour toi que ça déconne ?
    Je vais regarder l'API shell.

  6. #6
    Membre actif Avatar de Tanebisse
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 449
    Points : 260
    Points
    260
    Par défaut
    Tout ce que j'ai trouvé sur shell.jar pointe sur le blog d'Adiguba, hors ce dernier est inaccessible. Peux-tu me donner un lien où téléchargé shell.jar ?

  7. #7
    Membre chevronné
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Points : 2 197
    Points
    2 197
    Par défaut
    Citation Envoyé par Tanebisse Voir le message
    Tout ce que j'ai trouvé sur shell.jar pointe sur le blog d'Adiguba, hors ce dernier est inaccessible. Peux-tu me donner un lien où téléchargé shell.jar ?
    Juste pour information : http://www.developpez.net/forums/sho...40#post3325240
    Si chtig ne te donne pas d'autre lien, il te suffira d'attendre un petit peu que les blogs soient de nouveau disponibles.

  8. #8
    Membre chevronné
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Points : 1 787
    Points
    1 787
    Par défaut
    Citation Envoyé par Tanebisse Voir le message
    Dans un premier temps j'ai essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Runtime.getRuntime().exec("D:/Program Files/MySQL/MySQL Server 5.0/bin/mysqldump.exe --user=root password=root mathis > dump_mathis2.sql");
    Mais ça ne fonctionne pas. C'est normal pour toi que ça déconne ?
    Je vais regarder l'API shell.
    Totalement normal ! Avec exec, on ne peut pas rediriger la sortie.

    De là deux solutions :
    - Soit tu utilises des paramètres mysql pour dire quel fichier générer avec le paramètre --result-file=. Ne pas oublier --single-transaction pour avoir qqchose de cohérent si ta base est en cours d'utilisation
    - Utiliser l'API d'adiguba (malheureusement je n'ai pas d'autre lien) qui permet de rediriger la sortie

    Ce que je conseille à terme, c'est une combinaison des deux. En effet, donner le nom de fichier à mysqldump est plus propre et certainement plus performant. Mais il vaut mieux tout de même prendre l'api pour gérer les flux d'entrée sortie (son blog l'explique très bien, à voir quand ce sera dispo)

  9. #9
    Membre chevronné
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Points : 2 197
    Points
    2 197
    Par défaut
    Les blogs sont de retour

  10. #10
    Membre actif Avatar de Tanebisse
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 449
    Points : 260
    Points
    260
    Par défaut
    OK, je suis donc parti avec la classe shell et j'ai fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String result = sh.command("D:\\Program Files\\MySQL\\MySQL Server 5.0\\bin\\mysqldump.exe --user=root --password=root mathis > dump_mathis2.sql").consumeAsString();
    Mais il me jette en me disant ça :
    'D:\Program' n'est pas reconnu en tant que commande interne
    ou externe, un programme ex‚cutable ou un fichier de commandes.

  11. #11
    Membre actif Avatar de Tanebisse
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 449
    Points : 260
    Points
    260
    Par défaut
    Je viens également d'essayer ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    String result = sh.command("D:").consumeAsString();
    			System.out.println(result);
    			result = sh.command("cd Program Files").consumeAsString();
    			System.out.println(result);
    			result = sh.command("cd MySQL").consumeAsString();
    			System.out.println(result);
    			result = sh.command("cd MySQL Server 5.0").consumeAsString();
    			System.out.println(result);
    			result = sh.command("cd bin").consumeAsString();
    			System.out.println(result);
    			result = sh.command("mysqldump.exe --user=root --password=root mathis > dump_mathis2.sql").consumeAsString();
    			System.out.println(result);
    Et là sa plante sur le "cd Program Files". Il doit y avoir un problème avec les espaces.

  12. #12
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par Tanebisse Voir le message
    Mais il me jette en me disant ça :
    'D:\Program' n'est pas reconnu en tant que commande interne
    ou externe, un programme ex‚cutable ou un fichier de commandes.
    Normal puisque le nom du programme doit être entre quote. Tu aurais la même erreur si tu tapes la commande dans une commande MSDos...

    Citation Envoyé par Tanebisse Voir le message
    [CODE]Et là sa plante sur le "cd Program Files". Il doit y avoir un problème avec les espaces.
    En général si cela correspond à un paramètre il doit être protégé par des quotes, mais pour CD c'est inutile.
    Ici le problème vient du fait que chaque commande est indépendante de la précédente... et que donc c'est exécuté dans le répertoire courant et non pas sur D:


    Donc :
    • Soit tu utilises des quotes autour du nom du programme :
      [code]String result = sh.command("\"D:\\Program Files\\MySQL\\MySQL Server 5.0\\bin\\mysqldump.exe\" --user=root --password=root mathis > dump_mathis2.sql").consume();

    • Soit tu changes le répertoire de travail de la classe Shell :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
          shell.setDirectory(new File("D:\\Program Files\\MySQL\\MySQL Server 5.0\\bin\\"));
          shell.command("mysqldump.exe --user=root --password=root mathis > dump_mathis2.sql")
          	.consume();


    Au passage le consumeAsString() est inutile puisque tu rediriges la sortie...




    Sinon en utilisant getMetaData() de la Connection, il doit être possible de faire une méthode d'export en Java/JDBC pure, mais ce doit être nettement plus complexe (mais portable !)

    a++

  13. #13
    Membre actif Avatar de Tanebisse
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 449
    Points : 260
    Points
    260
    Par défaut
    J'ai corrigé comme tu me la suggéré de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sh.command("\"D:\\Program Files\\MySQL\\MySQL Server 5.0\\bin\\mysqldump.exe\" --user=root --password=root mathis > dump_mathis2.sql").consume();
    Mais j'ai une nouvelle erreur qui me laisse elle se déclenche dès l'éxécution de la ligne ci-dessus et ce qui est étonnant c'est qu'il ne rentre pas dans le catch ???
    30 mai 2008 16:22:48 org.apache.struts.chain.commands.AbstractExceptionHandler execute
    ATTENTION: Unhandled exception
    java.lang.IllegalArgumentException
    at java.lang.ProcessImpl.<init>(ProcessImpl.java:69)
    at java.lang.ProcessImpl.start(ProcessImpl.java:30)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:451)
    at com.developpez.adiguba.shell.ProcessConsumer.getProcess(ProcessConsumer.java:471)
    at com.developpez.adiguba.shell.ProcessConsumer.consume(ProcessConsumer.java:486)
    at web.action.ExportBaseAction.execute(ExportBaseAction.java:75)
    at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)
    at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)
    at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
    at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
    at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
    at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
    at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
    at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    at java.lang.Thread.run(Thread.java:595)
    30 mai 2008 16:22:48 org.apache.struts.chain.commands.ExceptionCatcher postprocess
    ATTENTION: Exception from exceptionCommand 'servlet-exception'
    java.lang.IllegalArgumentException
    at java.lang.ProcessImpl.<init>(ProcessImpl.java:69)
    at java.lang.ProcessImpl.start(ProcessImpl.java:30)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:451)
    at com.developpez.adiguba.shell.ProcessConsumer.getProcess(ProcessConsumer.java:471)
    at com.developpez.adiguba.shell.ProcessConsumer.consume(ProcessConsumer.java:486)
    at web.action.ExportBaseAction.execute(ExportBaseAction.java:75)
    at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)
    at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)
    at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
    at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
    at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
    at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
    at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
    at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    at java.lang.Thread.run(Thread.java:595)
    30 mai 2008 16:22:48 org.apache.catalina.core.StandardWrapperValve invoke
    GRAVE: "Servlet.service()" pour la servlet action a généré une exception
    java.lang.IllegalArgumentException
    at java.lang.ProcessImpl.<init>(ProcessImpl.java:69)
    at java.lang.ProcessImpl.start(ProcessImpl.java:30)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:451)
    at com.developpez.adiguba.shell.ProcessConsumer.getProcess(ProcessConsumer.java:471)
    at com.developpez.adiguba.shell.ProcessConsumer.consume(ProcessConsumer.java:486)
    at web.action.ExportBaseAction.execute(ExportBaseAction.java:75)
    at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)
    at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)
    at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
    at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
    at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
    at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
    at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
    at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    at java.lang.Thread.run(Thread.java:595)

  14. #14
    Membre actif Avatar de Tanebisse
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 449
    Points : 260
    Points
    260
    Par défaut
    Ta deuxième solution fonctionne parfaitement donc ça m'ira mais je suis quand même intéressé pour savoir pourquoi la première merde ?

  15. #15
    Membre chevronné
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Points : 1 787
    Points
    1 787
    Par défaut
    N'oublie pas le --single-transaction ! Et sinon, je persiste à pense que le --result-file=xxx est plus optimisé que le >xxx . Je suis aussi assez curieux de la réponse d'Adiguba sur la première méthode

  16. #16
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Tanebisse Voir le message
    Mais j'ai une nouvelle erreur qui me laisse elle se déclenche dès l'éxécution de la ligne ci-dessus
    En recherchant les trois premières lignes de l'exception sous Google, je suis tombé là dessus : http://bugs.sun.com/bugdatabase/view...bug_id=6468220

    Apparemment sous Windows les quotes dans un exec sont mal géré et peuvent posé ce problème dans certains cas (apparemment lorsque l'élément commence par une quote)

    Donc le mieux serait d'utiliser la seconde méthode....

    Citation Envoyé par Tanebisse Voir le message
    et ce qui est étonnant c'est qu'il ne rentre pas dans le catch ???
    Si tu ne catche pas spécifiquement les IllegalArgumentException ou toutes les exceptions c'est normal... sinon il y a un gros problème





    Pour info tu peux faire cela en utilisant directement Runtime.exec() ou un ProcessBuilder, et dans ce cas le code ressemblerait à ceci :
    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
    	Process process = Runtime.getRuntime().exec(
    		// 1 - La commande a exécuter (le shell), en séparant les paramètres :
    		new String[] {
    			"cmd.exe", // ou command.com sous Windows 9x
    			"/C",
    			"mysqldump.exe --user=root --password=root mathis > dump_mathis2.sql" },
    		// 2 - Les variables d'environnements (null = hérité du parent)
    		null,
    		// 3 - Le répertoire de travail
    		new File("D:\\Program Files\\MySQL\\MySQL Server 5.0\\bin\\")
    	);
    	try {
    		// On ferme stdin (on ne l'utilise pas)
    		process.getOutputStream().close();
    		// On ferme stdout (il est redirigé, et donc vide)
    		process.getInputStream().close();
    		// On récupère le flux d'erreur pour l'afficher dans la console :
    		InputStream in = process.getInputStream();
    		try {
    			byte[] buf = new byte[512];
    			int len;
    			while ( (len=in.read(buf)) >= 0 ) {
    				System.err.write(buf, 0, len);
    			}
    		} finally {
    			in.close();
    		}
     
     
    		// On attend la fin du process
    		process.waitFor();
    	} finally {
    		process.destroy();
    	}
    En sachant que tu ne traites que le flux d'erreur. Si tu dois traiter les 3 flux il faudra créer 2 threads supplémentaire (un par flux).

    a++

  17. #17
    Membre actif Avatar de Tanebisse
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 449
    Points : 260
    Points
    260
    Par défaut
    Merci pour les conseils Chtig je vais utiliser --result-file=xxx. Merci également Adiguba pour ces précisions.
    Maintenant si je veux spécifier un chemin d'accès au lieu d'uniquement indiquer le nom de fichier "dump_mathis2.sql" comment je fais ? J'ai essayé un mélange des différentes techniques qu'on vient d'évoquer en vain.

  18. #18
    Membre actif Avatar de Tanebisse
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 449
    Points : 260
    Points
    260
    Par défaut
    Bonjour,
    Je suis toujours bloqué pour spécifier un chemin d'accès pour le fichier résultant du dump. Voici le code :
    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
     
    public class ExportBaseAction extends Action {
    	public ActionForward execute(ActionMapping mapping, ActionForm form,
    			HttpServletRequest req, HttpServletResponse rep) {
     
    		ActionForward action = null;
    		FileSystemView vueSysteme = FileSystemView.getFileSystemView();
    		File home = vueSysteme.getHomeDirectory();
    		String bureau = home.getAbsolutePath();
    		Shell sh = new Shell();
     
    		try {
    			sh.setDirectory(new File("D:\\Program Files\\MySQL\\MySQL Server 5.0\\bin\\"));
    			String file = "'"+bureau + "\\dump_mathis2.sql"+"'";
    			sh.command("mysqldump.exe --user=root --password=root mathis --result-file=" + file).consume();
     
    		} catch (IllegalStateException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		mapping.findForward("succes");
    		return action;
    	}
    }
    J'ai l'impression que "--result-file=" n'accepte pas les chemins d'accès mais uniquement un nom de fichier. Comment je peux faire pour lui dire où enregistrer ce fichier ?

  19. #19
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Tu as un message d'erreur précis ?



    Je ne pense pas que --result-file soit plus rapide que la sortie standard. Dans les deux cas il s'agit d'une écriture dans un flux...

    Bien sûr si la sortie n'est pas redirigé l'affichage dans le terminal peut être long... mais ce n'est pas le cas ici.

    Par contre c'est préférable si la sortie n'est pas un fichier texte...



    Pour ton problème il faudrait savoir ce que vaut file. S'il s'agit d'un chemin relatif il peut ne plus être correct par rapport au nouveau répertoire, et s'il comporte des espaces le paramètre peut être coupé en deux (il faudrait le quoter) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sh.command("mysqldump.exe --user=root --password=root mathis --result-file=\"" + file.getAbsolutePath() + "\"").consume();


    a++

  20. #20
    Membre actif Avatar de Tanebisse
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 449
    Points : 260
    Points
    260
    Par défaut
    Voila, la première ligne est un println de file et la seconde le message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    'C:\Documents and Settings\sprodhomme\Bureau\dump_mathis2.sql'
    mysqldump: Can't create/write to file ''C:\Documents' (Errcode: 22)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 7
    Dernier message: 26/09/2017, 10h02
  2. chemin d'accés du répertoire de déploiement
    Par elwood973 dans le forum VB.NET
    Réponses: 1
    Dernier message: 25/07/2011, 01h36
  3. [VB]récupérer le chemin d'accès du répertoire de profile
    Par Empty_body dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 06/02/2006, 10h37
  4. Chemin d'accès à un répertoire
    Par Crazyblinkgirl dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 22/08/2004, 14h39
  5. Chemin d'accès de MySQL sous linux
    Par sylvain_neus dans le forum Installation
    Réponses: 6
    Dernier message: 17/03/2004, 10h39

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