Re:Restaurar Bancos de Dados com aplicativo java(Resolvido)
16 respostas
Z
zep
GALERA ALGUEM JA FEZ UMA APLICAÇÃO PARA RESTAURAR O BANCO DE DADOS??
MEAJUDEM AI OLHA MEU CODIGO
GALERA ALGUEM JA FEZ UMA APLICAÇÃO PARA RESTAURAR O BANCO DE DADOS??
MEAJUDEM AI OLHA MEU CODIGO
JFileChooserchooser=newJFileChooser("c:\\");chooser.setDialogTitle("Selecioneoarquivodebackup");chooser.showOpenDialog(chooser);Filebkp;// = new File();bkp=chooser.getSelectedFile();Stringarq=bkp.getPath();System.out.println(arq);Processexec;try{Stringcomando="cmd/cmysql-uroot-p-fctrl_caixa<c:\\ctrl_caixa.sql";Runtime.getRuntime().exec(comando);JOptionPane.showMessageDialog(null,"Arquivorestauradocomsucesso!");}catch(Exceptione){e.printStackTrace();JOptionPane.showMessageDialog(null,"Falhaaorestaurararquivo!");}
viniGodoy, Desculpa foi a primeira vez que postei aki
nao sabia das regras mas vou cumprilas agora.
quanto ao erro nao aparece nenhum erro. so que entra em um loop infinito ou algo do tipo
a aplicação fica rodadando rodadando e nao acontece nada, se poderem me ajudar
Z
zep
Galera ninguem pode me ajudar?
E
entanglement
Seu problema é com o “<” - toda vez que você precisar ter um comando que inclui um “<” ou um “>”, você precisa cercar o comando inteiro que contém o “<” entre aspas duplas. Um exemplo:
Você configurou o path para o mysql? Se não configurar o CMD não aceita esse tipo de comando, talvez seja isso…
Z
zep
gugademelo: acho que nao como faz isso?
G
gugademelo
A mesma coisa que configurar o JDK, abre a pasta do mysql, vai até a pasta bin e copia o endereço… Depois adiciona nas variáveis de ambiente junto com o Java.
Z
zep
nossa desculpa mais e que sou iniciante no java e sei o basico do basico tem como vc me encinar com explo?
G
gugademelo
Abra seu CMD, digite mysql e pressione enter… Depois diz o que apareceu.
J
jmmenezes
Amigo fiz um teste e funciona normalmente.
try{StringdirMysql="C:\\wamp\\bin\\mysql\\mysql5.5.16\\bin";StringcomandoMysql="cmd /c mysql -uroot sys < c:\\temp\\bkp\\backup.sql";Processprocess=Runtime.getRuntime().exec(comandoMysql,null,newFile(dirMysql));process.waitFor();}catch(Exceptionex){ex.printStackTrace();}
Agora com Java 7, você pode mudar o esquema e conseguir fazer de um jeito bem mais legal.
try{byte[]bytes=newbyte[4096];StringdirMysql="C:\\wamp\\bin\\mysql\\mysql5.5.16\\bin\\";ProcessBuilderpb=newProcessBuilder(dirMysql+"mysql","-u","root","sys");pb.redirectInput(ProcessBuilder.Redirect.from(newFile("c:\\temp\\bkp\\backup.sql")));Processprocess=pb.start();//BufferedInputStream in = new BufferedInputStream(process.getInputStream());BufferedInputStreamin=newBufferedInputStream(process.getErrorStream());StringBufferretorno=newStringBuffer("");while(in.read(bytes)!=-1){retorno.append(newString(bytes));}process.waitFor();if(!retorno.toString().equals("")){thrownewException("Erro no comando: "+retorno);}}catch(Exceptionex){ex.printStackTrace();}
Seu problema pode ser path…
ou senão arquivo inválido…
ou ainda a falta do process.waitFor() o programa morre antes de terminar de rodar o comando todo…
ATUALIZADO: Para ler os erros que o mysql gera se o script estiver invalido por exemplo, precisa usar o ErrorStream ao invés do InputStream…
Se for um programa que usa a saída padrão, nesse caso sim use o InputStream…
J
jmmenezes
Para te ajudar, segue a classe completa:
importjava.io.BufferedInputStream;importjava.io.File;importjava.io.IOException;publicfinalclassRestoreDatabase{privateRestoreDatabase(){}publicstaticvoidmain(String[]args)throwsIOException,InterruptedException{antesDoJava7();depoisDoJava7();}publicstaticvoidantesDoJava7(){try{byte[]bytes=newbyte[4096];StringdirMysql="C:\\wamp\\bin\\mysql\\mysql5.5.16\\bin";StringcomandoMysql="cmd /c mysql -uroot sys < c:\\temp\\bkp\\backup.sql";Processprocess=Runtime.getRuntime().exec(comandoMysql,null,newFile(dirMysql));BufferedInputStreamin=newBufferedInputStream(process.getErrorStream());StringBufferretorno=newStringBuffer("");while(in.read(bytes)!=-1){retorno.append(newString(bytes));}process.waitFor();if(!retorno.toString().equals("")){thrownewException("Erro no comando: "+retorno);}}catch(Exceptionex){ex.printStackTrace();}}publicstaticvoiddepoisDoJava7(){try{byte[]bytes=newbyte[4096];StringdirMysql="C:\\wamp\\bin\\mysql\\mysql5.5.16\\bin\\";ProcessBuilderpb=newProcessBuilder(dirMysql+"mysql","-u","root","sys");pb.redirectInput(ProcessBuilder.Redirect.from(newFile("c:\\temp\\bkp\\backup.sql")));Processprocess=pb.start();BufferedInputStreamin=newBufferedInputStream(process.getErrorStream());StringBufferretorno=newStringBuffer("");while(in.read(bytes)!=-1){retorno.append(newString(bytes));}process.waitFor();if(!retorno.toString().equals("")){thrownewException("Erro no comando: "+retorno);}}catch(Exceptionex){ex.printStackTrace();}}}
Z
zep
Galera vlw por terem me ajudado a solução foi a seguinte
try{//String dirMysql = "C:\\wamp\\bin\\mysql\\mysql5.0.45\\bin"; StringdirMysql="C:\\Arquivos de programas\\MySQL\\MySQL Server 5.5\\bin";StringcomandoMysql="cmd /c mysql -uroot ctrl_caixa < c:\\ctrl_caixa.sql";Processprocess=Runtime.getRuntime().exec(comandoMysql,null,newFile(dirMysql));process.waitFor();JOptionPane.showMessageDialog(null,"Backup restaurado com sucesso");}catch(IOException|InterruptedExceptionex){JOptionPane.showMessageDialog(null,"Não foi possivel restaura o banco de dados");}