Re:Restaurar Bancos de Dados com aplicativo java(Resolvido)

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

[code]JFileChooser chooser = new JFileChooser("c:\");
chooser.setDialogTitle("Selecione o arquivo de backup");
chooser.showOpenDialog(chooser);
File bkp;// = new File();
bkp = chooser.getSelectedFile();
String arq = bkp.getPath();
System.out.println(arq);

Process exec;
try {
String comando = "cmd /c mysql -uroot -p -f ctrl_caixa < c:\ctrl_caixa.sql";
Runtime.getRuntime().exec(comando);
JOptionPane.showMessageDialog(null, "Arquivo restaurado com sucesso!");
}catch(Exception e){
e.printStackTrace();
JOptionPane.showMessageDialog(null,"Falha ao restaurar arquivo!");
} [/code]

Nao funciona nem a pau ajuda ai.

Não precisa criar 3 tópicos por causa disso.

Não duplique, triplique tópicos.
Crie um e aguarde.
Removi os outros dois pois não havia respostas.

[]'s

Por favor:
NÃO ABUSE DAS LETRAS MAIÚSCULAS;
Poste a mensagem de erro que está dando;

E leia as práticas de postagem do fórum:

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

Galera ninguem pode me ajudar?

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:

"cmd /c \"mysql -uroot -p -f ctrl_caixa < c:\\ctrl_caixa.sql\""

entao entanglament ainda nao deu certo.
sera que nao tem nada de errado com o codigo?

alguem pode me ajudar com esse problema?

esse codigo era pra restaurar o banco de dados porem nao acontece nada, sera quem pode me ajudar?

try { String comando = "cmd /c \"mysql -uroot -p -f ctrl_caixa < c:\\ctrl_caixa.sql\""; Runtime.getRuntime().exec(comando); JOptionPane.showMessageDialog(null, "Arquivo restaurado com sucesso!"); }catch( IOException | HeadlessException e){ JOptionPane.showMessageDialog(null,"Falha ao restaurar arquivo!"); }

Você configurou o path para o mysql? Se não configurar o CMD não aceita esse tipo de comando, talvez seja isso…

gugademelo: acho que nao como faz isso?

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.

nossa desculpa mais e que sou iniciante no java e sei o basico do basico tem como vc me encinar com explo?

Abra seu CMD, digite mysql e pressione enter… Depois diz o que apareceu.

Amigo fiz um teste e funciona normalmente.

 try {
			 
			 String dirMysql = "C:\\wamp\\bin\\mysql\\mysql5.5.16\\bin";
			 String comandoMysql = "cmd /c mysql -uroot sys < c:\\temp\\bkp\\backup.sql";
			 
			 Process process = Runtime.getRuntime().exec(comandoMysql, null, new File(dirMysql));
	         process.waitFor();
	         
		 } catch (Exception ex) {
			 ex.printStackTrace();
		 }

Agora com Java 7, você pode mudar o esquema e conseguir fazer de um jeito bem mais legal.

try {
			 
			 byte[] bytes = new byte[4096];
			 
			 String dirMysql = "C:\\wamp\\bin\\mysql\\mysql5.5.16\\bin\\";
			 ProcessBuilder pb = new ProcessBuilder(
					 dirMysql + "mysql", "-u", "root", "sys");
			 pb.redirectInput(ProcessBuilder.Redirect.from(new File("c:\\temp\\bkp\\backup.sql")));
			 Process process = pb.start();
			 
	         //BufferedInputStream in = new BufferedInputStream(process.getInputStream());
                 BufferedInputStream in = new BufferedInputStream(process.getErrorStream());
			     
	         StringBuffer retorno = new StringBuffer("");
	         while (in.read(bytes) != -1) {
	        	 retorno.append(new String(bytes));
	         }

			 process.waitFor();
			 
			 if (!retorno.toString().equals("")) {
				 throw new Exception("Erro no comando: " + retorno);
			 }
	         
		 } catch (Exception ex) {
			 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…

Para te ajudar, segue a classe completa:

import java.io.BufferedInputStream;
import java.io.File;
import java.io.IOException;

public final class RestoreDatabase {
	
	private RestoreDatabase() {
		
	}
	
	public static void main(String[] args) throws IOException, InterruptedException {
		 
		antesDoJava7();
		depoisDoJava7();
     }
	
	public static void antesDoJava7() {
		 try {
			 byte[] bytes = new byte[4096];
			 String dirMysql = "C:\\wamp\\bin\\mysql\\mysql5.5.16\\bin";
			 String comandoMysql = "cmd /c mysql -uroot sys < c:\\temp\\bkp\\backup.sql";
			 
			 Process process = Runtime.getRuntime().exec(comandoMysql, null, new File(dirMysql));
	         BufferedInputStream in = new BufferedInputStream(process.getErrorStream());
		     
	         StringBuffer retorno = new StringBuffer("");
	         while (in.read(bytes) != -1) {
	        	 retorno.append(new String(bytes));
	         }

			 process.waitFor();
			 
			 if (!retorno.toString().equals("")) {
				 throw new Exception("Erro no comando: " + retorno);
			 }
	         
		 } catch (Exception ex) {
			 ex.printStackTrace();
		 }
	}
	
	public static void depoisDoJava7() {
		 try {
			 
			 byte[] bytes = new byte[4096];
			 
			 String dirMysql = "C:\\wamp\\bin\\mysql\\mysql5.5.16\\bin\\";
			 ProcessBuilder pb = new ProcessBuilder(
					 dirMysql + "mysql", "-u", "root", "sys");
			 pb.redirectInput(ProcessBuilder.Redirect.from(new File("c:\\temp\\bkp\\backup.sql")));
			 Process process = pb.start();
			 
	         BufferedInputStream in = new BufferedInputStream(process.getErrorStream());
			     
	         StringBuffer retorno = new StringBuffer("");
	         while (in.read(bytes) != -1) {
	        	 retorno.append(new String(bytes));
	         }

			 process.waitFor();
			 
			 if (!retorno.toString().equals("")) {
				 throw new Exception("Erro no comando: " + retorno);
			 }
	         
		 } catch (Exception ex) {
			 ex.printStackTrace();
		 }
	}

}

Galera vlw por terem me ajudado a solução foi a seguinte

[code]
try {
//String dirMysql = “C:\wamp\bin\mysql\mysql5.0.45\bin”;
String dirMysql = “C:\Arquivos de programas\MySQL\MySQL Server 5.5\bin”;
String comandoMysql = “cmd /c mysql -uroot ctrl_caixa < c:\ctrl_caixa.sql”;

        Process process = Runtime.getRuntime().exec(comandoMysql, null, new File(dirMysql));  
        process.waitFor();  
        JOptionPane.showMessageDialog(null, "Backup restaurado com sucesso");   
     } catch (IOException | InterruptedException ex) {  
        JOptionPane.showMessageDialog(null, "Não foi possivel restaura o banco de dados"); 
     }[/code]