Problemas em gerar dump mysql no java!

6 respostas
Q

Oi galera! Tô com um problemao aki.
É o seguinte, to fazendo uma aplicaçao Desktop para um cliente e quero que seja possivel gerar um Backup do banco. ou seja um Dump! fiz minha classe aki, nao sei qual o problema mas ele simplesmente só gera o arquivo .sql e quando abro este arquivo esta em branco, nao tem nada!
aki vai a classe:
package Classes;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileWriter;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

public class Beckup{

public static void Beckup(){

String path=C:\Arquivos de Programas\data.sql;

String dumpCommand = cmd /c mysqldump -u root -p admin aluno > " + path;

File tst = new File(path);

FileWriter fw = null;

try{

fw = new FileWriter(tst);

fw.close();

}catch(IOException ex){

ex.printStackTrace();

}

Runtime rt = Runtime.getRuntime();

try {

Process proc = rt.exec(dumpCommand);

InputStream in = proc.getInputStream();

InputStreamReader read = new InputStreamReader(in,“latin1”);

BufferedReader br = new BufferedReader(read);

BufferedWriter bw = new BufferedWriter(new FileWriter(tst,true));

String line=null;

StringBuffer buffer = new StringBuffer();

while((line=br.readLine())!=null){

buffer.append(line+”\n");

}

String toWrite = buffer.toString();

bw.write(toWrite);

bw.close();

br.close();

} catch (IOException e) {

e.printStackTrace();

}
}
public static void main(String args[]){
    Beckup();
}

}
Agradeço!

6 Respostas

A

qtgp2std:
Oi galera! Tô com um problemao aki.
É o seguinte, to fazendo uma aplicaçao Desktop para um cliente e quero que seja possivel gerar um Backup do banco. ou seja um Dump! fiz minha classe aki, nao sei qual o problema mas ele simplesmente só gera o arquivo .sql e quando abro este arquivo esta em branco, nao tem nada!
aki vai a classe:
package Classes;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileWriter;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

public class Beckup{

public static void Beckup(){

String path=C:\Arquivos de Programas\data.sql;

String dumpCommand = cmd /c mysqldump -u root -p admin aluno > " + path;

File tst = new File(path);

FileWriter fw = null;

try{

fw = new FileWriter(tst);

fw.close();

}catch(IOException ex){

ex.printStackTrace();

}

Runtime rt = Runtime.getRuntime();

try {

Process proc = rt.exec(dumpCommand);

InputStream in = proc.getInputStream();

InputStreamReader read = new InputStreamReader(in,“latin1”);

BufferedReader br = new BufferedReader(read);

BufferedWriter bw = new BufferedWriter(new FileWriter(tst,true));

String line=null;

StringBuffer buffer = new StringBuffer();

while((line=br.readLine())!=null){

buffer.append(line+”\n");

}

String toWrite = buffer.toString();

bw.write(toWrite);

bw.close();

br.close();

} catch (IOException e) {

e.printStackTrace();

}
}
public static void main(String args[]){
    Beckup();
}

}
Agradeço!

primeiro utilize as tag code para colocar os códigos, fica mais legivel…

eu tive muitos problemas em usar chamadas de comandos externos que tenham parametro “>” e outros caracteres especiais. O java simplesmente se perde e não executa nada. Então vc tem que escerver em um arquivo (.bat ou .cmd) e executar por este arquivo.

Q

Tem alguma dica para escrever arquivos .bat ou cmd pro meu problema?

A

aqui mesmo tem tutoriais para escrita de arquivo.

http://www.guj.com.br/article.show.logic?id=13

se for linux, cuidado com a permissão de para a execução de arquivo… (tem que dar um chmod +x antes)

davidbuzatto

A senha (parâmetro -p) deve vir junto ao parâmetro: mysqldump -u root -padmin aluno
mysqldump é um programa, não um comando do shell do windows, sendo assim, não precisa invocar o cmd.

[]´s

M

Com motivo diria. Nesse caso, ao invés de executar o comando com um redirecionador de saída, o correto é executar o programa, ler a saída do processo via Java (usando Process.getInputStream() e Scanner, por exemplo) e salvar os dados lidos no arquivo de destino. Opcionalmente, pode-se criar um script de lotes (.bat ou .sh) mas o maior problema aqui é a portabilidade do código.

A

Com motivo diria. Nesse caso, ao invés de executar o comando com um redirecionador de saída, o correto é executar o programa, ler a saída do processo via Java (usando Process.getInputStream() e Scanner, por exemplo) e salvar os dados lidos no arquivo de destino. Opcionalmente, pode-se criar um script de lotes (.bat ou .sh) mas o maior problema aqui é a portabilidade do código.

os problemas que eu tive, não necessariamente o programa externo gerava saida, e sim era um parametro para o processamento dele mesmo… entao optei em fazer um arquivo .bat que serve para ambos os SO que eu queria, e executar por ele… No meu caso além de nção executar o comando com sucesso, o java criava umas pastas nada a ver com a vida com pedaços dos nomes do meu parametro…

Criado 30 de novembro de 2010
Ultima resposta 1 de dez. de 2010
Respostas 6
Participantes 4