Estou querendo implementar em meu sisteminha uma rotina de backup. Já procurei exemplo e ajuda aqui no fórum mas não encontrei. Gostaria de uma ajuda sua com algum exemplo para que eu possa estudar e implementar em meu sisteminha. Quero de toda forma implementar mesmo, ou seja; estudar, modificar, fazer de maneira diferencianda aperfeiçoando. Ficarei muito grato,
Vc quer “backupear” o que? a base de seu sistema? arquivos gerados por seu sistema? Se for arquivos basta vc trabalhar com classes de arquivos (File, FileInputStream,etc) para manipular copias (já que vc quer desenvover tudo). Deve existir classe que jah faz isso (com compactação e tudo). Se for backup da base vc pode programar em seu servidor de BD o backup ou programar alguma outra coisa (copiar todos os registros para arquivo, para outra base…) com codigos em Java.
Att,
A
AmamorimPJ
Prezado Leo,
Isso mesmo, voce disse tudo. O que eu quero é principalmente para o banco de dados. Eu gostaria de um exemplo de fazer isso em java, pelo jeto, da forma que voce sugeriu, só que não sei fazer isso.
Quero criar uma classe com os procedimentos para fazer o backup do banco de dados, inclusive até, se for o caso, quando eu for executar a rotina, eu puder ter a opção de escolher o local para armazenar o arquivo backupiado.
Atenciosamente,
Edson
L
leo1795PJ
Caro Edson,
Pelo que entendi então vc quer gerar um backup (.sql) com a estrutura e os dados de sua base. Eu nunca fiz isso, logo não tenho certeza de como fazer. Mas se eu fosse fazer eu teria duas opções:
Opção Mais grosseira: Fazer um select geral de cada tabela e inserir num arquivo (a sua escolha). Isso só vai vai ser 100% um backup pq não guardará a estrutura da tabela.
Bom, Testa aí e me fala.
Att,
A
AmamorimPJ
Prezado Leo,
Apenas ilustrando o que eu gostaria de ver numa rotina de backup; por exemplo: eu chamo a rotina de backup, ela localiza o banco de dados e gera um localizador de direório como no exemplo abaixo onde eu irei gravar o backup. Como é que eu faço isso?? veja o exemplo:
Não estou conseguindo inserir a imagem mas ela é gerada, me parece que é pelo objeto choser… Resumindo… gostaria de saber como funciona isso…
Grato,
Edson[/img]
L
leo1795PJ
Não sei se é esta sua dúvida, mas pelo JFileChooser pode se abrir uma janela daquela em que a gente escolhe um arquivo/diretorio surgindo ai um ponteiro pro local. Daí podemos criar/abrir arquivos /diretorios. Tem um exemplo abaixo (o mesmo que tem na documentação http://java.sun.com/javase/6/docs/api/):
JFileChooser chooser = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter(
"JPG & GIF Images", "jpg", "gif");
chooser.setFileFilter(filter);
int returnVal = chooser.showOpenDialog(parent);
if(returnVal == JFileChooser.APPROVE_OPTION) {
System.out.println("You chose to open this file: " +
chooser.getSelectedFile().getName());
}
Aí ele abre uma janela para se escolher um tipo de arquivo especifico. Acredito que por ae tb se consiga abrir um diretorio, para que vc possa escolher o local do seu backup.
Att ,
A
AmamorimPJ
Prezado Leo,
É isso mesmo que voce entendeu ou seja; eu quero ter uma janela onde eu possa procurar dentro de diretórios, os arquivos para os quais eu quero fazer o backup. Em outro momento, procurar desta mesma forma, o lugar onde eu vou gravar o backup. Agora, o que eu tenho que fazer, é completar o código com estes procedimentos. Ainda não sei mas desde já vou começar a tentativa. Já me ajudou muito mesmo!!
Fico muito agradecido,
Edson Amorim
C
cristianonascimentPJ
brother, to querendo fazer a mesma coisa.
seu BD é MY SQL ??
se for eu acho q tem um jeito mais fácil pra implementar.
Gerando dump do mysql.
1º baixa o programa.
Stringhost,user,pw;.........................Filetest=newFile("c:test00.sql");FileWriterfw=null;try{fw=newFileWriter(test);}catch(IOExceptionex){}try{Processchild=rt.exec("mysqldump -h"+host+" -u"+user+" -p"+pw+" dump_test");InputStreamin=child.getInputStream();InputStreamReaderxx=newInputStreamReader(in,"latin1");char[]chars=newchar[1024];intibyte=0;while((ibyte=xx.read(chars))>0){fw.write(chars);}fw.close();Hi,Iamtryingtoperformadatabasebackupusingmysqldumpthroughajavaservlet,butitisnotworking...Allsuggestionsgreatlyappreciated,asineedthisdoneyesterday!try{Stringline;Stringname="portiadb";String[]cmd2={"mysqldump","--opt","portiadb"};Processp=Runtime.getRuntime().exec(cmd2);p.waitFor();DataInputStreaminput=newDataInputStream(p.getInputStream());VectortheBytes=newVector(500);// It will probably be far more booleankeepOn=true;while(keepOn){byteb=input.readByte();if(b==-1)keepOn=false;elsetheBytes.add(b);}theBytes.trimToSize();byte[]output=newbyte[theBytes.size()];for(inti=0;i<output.length;i++){output[i]=theBytes.elementAt(i);}System.out.println(output);// It will be more useful to create a FileOutputStream, and write 'output' to the file. input.close();}catch(Exceptionerr){err.printStackTrace();out.println(err);}
não testei o código, mas vou testar hoje.
se puder faça o mesmo, heheh
A
AmamorimPJ
Prezados colegas,
Estou quase conseguindo. Peguei as orientações de nosso amigo Cristiano através do codigo postado por ele acima mas ainda não consegui faze-lo funcionar; continuo insistindo e estou tentando implementar a sugestão de nosso outro colega, o Leo. Peguei um exemplo do filechoser mas não estou conseguindo é fazer a cópia do arquivo selecionado pelo filechoser, para o diretorio que determinei. Veja se é possivel me darem esta ajuda!!
Vejam o meu código:
// Este exemplo mostra como exibir um JFileChooser// e escolher um arquivo a partir de uma aplicação// consoleimportjavax.swing.*;importjava.io.*;publicclassEstudosFileChoser{publicstaticvoidmain(String[]args){finalJFileChooserfc=newJFileChooser();intres=fc.showOpenDialog(null);if(res==JFileChooser.APPROVE_OPTION){Filearquivo=fc.getSelectedFile();System.out.println("Voce escolheu o arquivo: "+arquivo.getName());try{Filearquivo1=newFile("arquivo.getName()");//File("C:\\java\\arquivo.getName()");Filearquivo2=newFile("C:\\java\\Meus_testes\\Exemplo2.java");//Copiei para o diretoriocopiar(arquivo1,arquivo2);System.out.println("O arquivo1 foi copiado para o arquivo2");}catch(IOExceptione){// pode ocorrer erros}}elseSystem.out.println("Voce nao selecionou nenhum arquivo.");}staticvoidcopiar(Filefonte,Filedestino)throwsIOException{InputStreamin=newFileInputStream(fonte);OutputStreamout=newFileOutputStream(destino);byte[]buf=newbyte[1024];intlen;while((len=in.read(buf))>0){out.write(buf,0,len);}in.close();out.close();}}
Atenciosamente,
Edson
A
AmamorimPJ
Caríssimos,
Quebrando cabeça daquí, dalí e com a grande ajuda de voces eu já consegui fazer parte da rotina funcionar.
Preciso agroa faz-la funcionar a partir da chamada dela por um item de menu. Fiz o procedimento corretamente porém, quando eu clico no menu para carregar esta rotina, não aparece nada, ela não carrega mas também não dá nenhuma mensagem.
Se eu executar ela sozinha, tudo funciona certinho.
O que pode estar acontecendo?
Atenciosamente,
Edson
R
Ricardo_azevedoPJ
Edson
Tenho uma classe que é muito interessante, poís é possível vc determinar o colcar onde vc criar seu backup.
*/publicclassMyExec{publicstaticfinalintTAM_BUF=4096;publicstaticfinalStringCOMMAND_LINE="mysqldump -uroot -plalala --opt teste ";publicstaticfinalStringTMP_DIR=“D://mysql//Bkps”;publicstaticfinalStringSENHA=“lalalla”;publicstaticStringdata=newSimpleDateFormat(“yyyy-MM-dd_h-mm_a”).format(newDate());publicMyExec(){super();}
publicstaticvoidmain(String[]args){MyExecmy=newMyExec();my.run();}publicvoidrun(){booleanresult=true;try{ProcessprocessReturn=Runtime.getRuntime().exec(COMMAND_LINE);if(processReturn!=null){BufferedOutputStreambo=newBufferedOutputStream(processReturn.getOutputStream());bo.write(SENHA.getBytes());bo.close();}InputStreamin=processReturn.getInputStream();if(in!=null){StringarqResult=this.buildResult(in,"bkpTeste_"+data,newFile(TMP_DIR).getAbsolutePath());if(result){System.out.println("Backup executado com sucesso em "+arqResult);}else{System.out.println("Backup::executado com erro ! Resultado em arquivo "+arqResult);}}}catch(IOExceptione){System.out.println("MyExec::run:exception "+e.toString());}}publicStringbuildResult(InputStreamin,StringnomeParcial,StringtempDir){FileflOut=null;BufferedWriterbw=null;BufferedReaderbr=null;charbuff[]=newchar[TAM_BUF];try{flOut=File.createTempFile(nomeParcial,".dmp",newFile(tempDir));bw=newBufferedWriter(newFileWriter(flOut));br=newBufferedReader(newInputStreamReader(in));intc;do{c=br.read(buff);if(c>0){bw.write(buff,0,c);}}while(c>0);}catch(Exceptione){System.out.println("MyExec::buildResult:exception "+e.toString());}finally{try{if(bw!=null)bw.close();if(br!=null)br.close();}catch(Exceptione){System.out.println("MyExec::buildResult:(close)exception "+e.toString());}}return(flOut.getAbsolutePath());}
}
Espero ter ajudado
Ricardo Azevedo
A
AmamorimPJ
Prezado Ricardo,
Achei muito interessante mesmo a sua classe. Vou adapta-la a minha necessidade que neste caso, estou usando o banco Access. Voce sabe como é que eu implemento esta modificação?