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;
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;
publicstaticvoidBeckup(){Stringpath=“C:\ArquivosdeProgramas\data.sql”;StringdumpCommand=“cmd/cmysqldump-uroot-padminaluno>" + 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");}StringtoWrite=buffer.toString();bw.write(toWrite);bw.close();br.close();}catch(IOExceptione){e.printStackTrace();}
}publicstaticvoidmain(Stringargs[]){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
qtgp2std
Tem alguma dica para escrever arquivos .bat ou cmd pro meu problema?
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
marcobiscaro2112
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
anderson_lp789
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…