Executar programa externo

2 respostas
Arikado

Tenho uma aplicação desktop que necessita fazer um backup da base de dados. O SGBD utilizado é o MySQL. Utilizo a ferramenta mysqldump para realizar o backup. O código utilizado para executar tal tarefa está abaixo:

try {
            Runtime rt = Runtime.getRuntime();
            Process proc = rt.exec("C:\\Program Files\\MySQL\\MySQL Server 5.1\\bin\\mysqldump -uroot -psenha mysql > backup_test.sql");
            InputStream stdin = proc.getInputStream();
            InputStreamReader in = new InputStreamReader(stdin);
            BufferedReader br = new BufferedReader(in);
            String line = null;
             while ( (line = br.readLine()) != null)
                System.out.println(line);
             int exitVal = proc.waitFor();
            System.out.println("exitValue: " + exitVal);
        } catch (Throwable t)
          {
            t.printStackTrace();
          }

A mensagem de saída é essa:

-- MySQL dump 10.12
--
-- Host: localhost    Database: mysql
-- ------------------------------------------------------
-- Server version	5.1.19-beta-community-nt-debug

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
exitValue: 6

Tudo dá certo, porém o backup não é efetuado. O arquivo não é gerado no diretório raiz (já testei noutros diretórios e não funcionou).

Já testei o mesmo código pelo prompt (Windows) e funcionou.

Se alguém puder ajudar ficarei muito grato.

2 Respostas

T

Se você vai usar redirecionamento ou outros comandos do shell, você precisa usar o "cmd.exe" e passar o parâmetro "/c". No seu caso:

...... = rt.exec("cmd /c ""C:\\Progra~1\\MySQL\\MySQLS~1.1\\bin\\mysqldump -uroot -psenha mysql > backup_test.sql"" ");
.....

E não se esqueça que você tem de achar o nome do diretório SEM ESPAÇOS para o comando acima funcionar.

Talvez você precise usar “dir /x” para achar o nome correto (não sei se “MySQL Server 5.1” vai virar “MySQLS~1.1” ou outra coisa.

Arikado

Fazendo assim eu perderia a portabilidade. Não creio que isso funcione em Linux. Mas de qualquer forma tentarei implementar essa sua idéia. Obrigado pela ajuda. :smiley: Caso não consiga, retornarei. :wink:

Criado 14 de outubro de 2008
Ultima resposta 14 de out. de 2008
Respostas 2
Participantes 2