2009-05-16 15 views
1

J'utilise Java et Mysql pour un programme, j'utilise un fichier script pour restaurer une base de données.Restaurer MYSQL à partir de la ligne CMD en utilisant l'environnement Java

Sous Java j'exécute une commande: sous bin: mysql -u root test -proot < c: \ test.mysql

Il ne fonctionne pas alors que si je lance sous la ligne de cmd il exécutera correctement et restaurer la base de données.

Y at-il quelqu'un qui sait .. pourquoi cela arrive .. Quel est le problème, pourquoi ne pas fonctionner si je l'exécute sous environnement Java.

exacte Syntaxe:. I m au moyen du procédé P = Runtime.getRuntime() exec (CheminFichier)

où la variable CheminFichier est d'avoir la valeur: mysql -u root test -proot < c: \ test.mysql

J'utilise l'environnement Windiws. Si j'exécute le FilePath dans CmdLine, cela donnera le résultat parfait.

Très reconnaissant ou aide.

+0

Est-ce que vous assurez-vous que MySQL est dans le CHEMIN? Vous pouvez vérifier le contenu de la variable PATH en utilisant getenv (http://java.sun.com/javase/6/docs/api/java/lang/System.html#getenv()). –

Répondre

0

Je pense que nous avons besoin de plus d'informations. Tant que les chemins sont configurés de la même manière, s'ils s'exécutent à partir de la ligne de commande, ils doivent être identiques à Runtime.exec(). Quelles erreurs voyez-vous? Essayez de définir l'ajout dans un script afin que vous puissiez répercuter les chemins d'accès et la sortie de la commande vers un fichier à consulter plus tard. Dans UNIX ressemblerait

LOGFILE=my.log 
echo $PATH > $LOGFILE 
env >> $LOGFILE 
mysql -u root -proot test<c:\test.mysql>> $LOGFILE 2>&1 

On dirait que vous utilisez Windows, donc je ne sais pas comment définir du fichier de commande exactement de cette façon; ce qui est important est de s'assurer que vous envoyez la sortie d'erreur de la commande mysql au fichier.

+0

Utilisation du processus P = runtime.getRunTime(). Exec (FilePath) où FilePath Variable a une valeur: mysql -u root -proot test

2

J'ai eu le même problème!

En fait, la seule chose que je pouvais faire le travail (sous Windows, havent testé d'autres plates-formes) utilise des fichiers batch:

est ici le code:

public class MysqlDatabase { 

private int BUFFER = 10485760; 
private String host, port, user, password, db; 

public MysqlDatabase(String host, String port, String user, String password, String db) { 
    this.host = host; 
    this.port = port; 
    this.user = user; 
    this.password = password; 
    this.db = db; 
} 

public boolean restoreDatabase(String filepath) throws Exception { 
    String comando = "mysql " + db + " --host=" + host + " --port=" + port 
      + " --user=" + user + " --password=" + password 
      + " < " + filepath; 
    File f = new File("restore.bat"); 
    FileOutputStream fos = new FileOutputStream(f); 
    fos.write(comando.getBytes()); 
    fos.close(); 
    Process run = Runtime.getRuntime().exec("cmd /C start restore.bat "); 
    return true; 

} 

public String getFull() throws Exception { 

    Process run = Runtime.getRuntime().exec(
      "mysqldump --host=" + host + " --port=" + port 
      + " --user=" + user + " --password=" + password 
      + " --opt " 
      + "" + db); 
    InputStream in = run.getInputStream(); 
    BufferedReader br = new BufferedReader(new InputStreamReader(in)); 

    StringBuilder temp = new StringBuilder(); 

    int count; 
    char[] cbuf = new char[BUFFER]; 

    while ((count = br.read(cbuf, 0, BUFFER)) != -1) { 
     temp.append(cbuf, 0, count); 
    } 

    br.close(); 
    in.close(); 

    return temp.toString(); 
}}