Problema ! Backup e Restauração de banco de dados MySql!

Opa, boa noite pessoal, dois problemas…
1º- Consigo fazer o backup do meu banco de dados, porém, só consegui destinar um diretório específico, como faria para colocar um selecionador de arquivo dentro do código abaixo??

String novonome = null;
        int numerodobackup = 0;
        File diretorio = new File("C:/teste");
        File bck = new File("C:/teste/cartoes.sql");
        if (!diretorio.isDirectory()) {
            new File("C:/teste").mkdir();
        } else {
        }
        // Cria Arquivo de Backup  
        try {
            if (!bck.isFile()) {
                String comando = "C:\\Program Files\\MySQL\\MySQL Server 5.5\\bin\\mysqldump.exe";
                ProcessBuilder pb = new ProcessBuilder(comando, "--user=root", "--password=1234", "cartoes", "--result-file=C:\\teste\\cartoes.sql");
                pb.start();
                JOptionPane.showMessageDialog(this, "Cópia de segurança realizada com sucesso", "Backup", JOptionPane.CLOSED_OPTION);

            } else {
                while (bck.isFile()) {
                    numerodobackup++;

                    bck = new File("C:/teste/cartoes" + numerodobackup + ".sql");
                    novonome = String.valueOf(bck);

                }

                String comando = "C:\\Program Files\\MySQL\\MySQL Server 5.5\\bin\\mysqldump.exe";
                ProcessBuilder pb = new ProcessBuilder(comando, "--user=root", "--password=1234", "cartoes", "--result-file=" + novonome);
                pb.start();
                JOptionPane.showMessageDialog(this, "Cópia de segurança realizada com sucesso!", "Backup", JOptionPane.CLOSED_OPTION);
                //dispose();
            }
        } catch (IOException ex) {
            ex.printStackTrace();

            JOptionPane.showMessageDialog(this, "Copia de segurança não realizada!", "Backup", JOptionPane.CLOSED_OPTION);
        }

2º - Já tentei de várias maneiras, mas não consegui, como fazer pra restaurar esse banco, selecionando o local do arquivo para depois terminar de executar o processo??

Espero que de pra entender :wink:

Me ajudeemmm por favor ;D

Se vc está usando interface gráfica, pode usar o JChooser, dá uma pesquisada a respeito, tem muito tempo q usei então não me lembro como fazer mas não é muito complicado.
Este link tem alguns exemplos: http://docs.oracle.com/javase/tutorial/uiswing/components/filechooser.html

[quote=fabiocortolan]Se vc está usando interface gráfica, pode usar o JChooser, dá uma pesquisada a respeito, tem muito tempo q usei então não me lembro como fazer mas não é muito complicado.
Este link tem alguns exemplos: http://docs.oracle.com/javase/tutorial/uiswing/components/filechooser.html[/quote]

hmm, certo, ja tinha visto esse site meio que por cima, mas nao consegui concluí-lo colocando dentro do meu codigo, precisava de algum exemplo mais pratico pra poder me espelhar… ;D

mas, vou dar mais uma lida nesse material ai pra ver se consigo fazer mais alguma coisa ;D

e quanto a restauração do backup, voce sabe alguma coisa?

Cara um exemplo prático com o JFileChooser no meu blog.

Veja se ajuda você.

Acho que o código é bem explicativo.

  private File selecionaCaminho() {
        JFileChooser fc = new JFileChooser();
        fc.setAutoscrolls(true);
        fc.setDialogTitle("Salvar Como");
        int res = fc.showSaveDialog(null);
        if (res == JFileChooser.APPROVE_OPTION) {
            return fc.getSelectedFile();
        }
        return null;
    }

Cara, não conheço muito sobre ProcessBuilder, mas posta o erro aí p/ gente dar uma olhada.

Bom, consegui resolver o primeiro problema, do filechooser, segue abaixo o codigo

String novonome = null;
        int numerodobackup = 0;
        String arquivo = null;
        
        JFC_Salvar_Backup.setVisible(true);
        
        int result = JFC_Salvar_Backup.showSaveDialog(null);
        
        if (result == JFileChooser.APPROVE_OPTION) {
            arquivo = JFC_Salvar_Backup.getSelectedFile().toString().concat(".sql");
 
            File bck = new File(arquivo);

            try {
                if (!bck.isFile()) {
                    String comando = "C:\\Program Files\\MySQL\\MySQL Server 5.5\\bin\\mysqldump.exe";
                    ProcessBuilder pb = new ProcessBuilder(comando, "--user=root", "--password=1234", "cartoes", "--result-file="+arquivo);
                    pb.start();
                    JOptionPane.showMessageDialog(this, "Cópia de segurança realizada com sucesso", "Backup", JOptionPane.CLOSED_OPTION);
                    
                } else {
                    while (bck.isFile()) {
                        numerodobackup++;
                        
                        bck = new File(arquivo + numerodobackup );
                        novonome = String.valueOf(bck);                      
                    }
                    
                    String comando = "C:\\Program Files\\MySQL\\MySQL Server 5.5\\bin\\mysqldump.exe";
                    ProcessBuilder pb = new ProcessBuilder(comando, "--user=root", "--password=1234", "cartoes", "--result-file=" + novonome);
                    pb.start();
                    JOptionPane.showMessageDialog(this, "Cópia de segurança realizada com sucesso!", "Backup", JOptionPane.CLOSED_OPTION);
                    //dispose();
                    
                }
            } catch (Exception e) {
                JOptionPane.showMessageDialog(null, e, "Cópia de Segurança não pode ser realizada!!", 2);
            }
        }

Porém, o segundo problema, ainda estou sem solução, não consigo restaurar o backup de forma alguma!! =x

Alguem tem alguma idéia de como fazer?

Dá uma olhada neste post, talvez te ajude:
http://www.guj.com.br/java/140421-restaurar-banco-mysql-via-codigo-em-sistema-java-resolvido

pessoal, voces podem me ajudar ?

estou com problemas para exportar eu banco pelo mysqldump, ele exporta, mas os registros que tem nele não são exportados junto.

como faço para ele exportar os registros junto com o banco ?

[quote=yfalbino]pessoal, voces podem me ajudar ?

estou com problemas para exportar eu banco pelo mysqldump, ele exporta, mas os registros que tem nele não são exportados junto.

como faço para ele exportar os registros junto com o banco ?[/quote]

Não entendi tua duvida… teu sistema cria o arquivo de backup, porem vazio? é isso?

isso mesmo, quando eu exporto o banco de dados pelo mysqldump, ele gera vazio, se eu importar denovo, nao tem os registros…

Cara, quando deu esse problema aqui, era a senha que fica na conexao do banco de dados que estava errada, ele criava o arquivo no diretório, porem em branco, manda o codigo ai da tua conexao e da classe que ta fazendo backup pra eu dar uma olhada :wink:

antes de colocar no codigo, eu estava tentando fazer pelo prompt do dos… e estava dando erro, mas vou tentar fazer pelo codigo, se der algum erro eu posto novamente

segue o codigo que eu usei para exportar o banco:

Connection conexao; try { Class.forName("com.mysql.jdbc.Driver"); conexao = DriverManager.getConnection("jdbc:mysql://localhost:3306/controledeestoque", "root", "localhost"); Statement stm2 = conexao.createStatement(); stm2.execute("mysqldump -opt -u root -p localhost despesas > c:/teste.sql"); conexao.close(); } catch (ClassNotFoundException | SQLException ex) { System.out.println(ex); }

e erro é este:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'mysqldump -opt -u root -p localhost despesas > c:/teste.sql' at line 1

mas o codigo para exportar está certo, ou nao está ?

vc já tentou tirar a opção "-opt" e o local (localhost)? E a senha, vc está colocando?
Não sei se vai funcionar mas tente dessa forma:

mysqldump -u [usuario] -p [senha] despesas > c:/teste.sql

Obrigado pela resposta

mas o erro ainda permanece =/

[quote=yfalbino]Obrigado pela resposta

mas o erro ainda permanece =/[/quote]

cara, é sempre bom colocar uma senha no banco, não só por segurança, mas tem alguns métodos que só funcionam certinho, tendo alguma senha.

olha, ta aqui o código do meu botao que faz o backup, de uma olhadinha nele…

 String novonome = null;
        int numerodobackup = 0;
        String arquivo = null;

        JFC_Salvar_Backup.setVisible(true);

        int result = JFC_Salvar_Backup.showSaveDialog(null);

        if (result == JFileChooser.APPROVE_OPTION) {
            arquivo = JFC_Salvar_Backup.getSelectedFile().toString().concat(".sql");

            File bck = new File(arquivo);

            try {
                if (!bck.isFile()) {
                    String comando = "C:\\Program Files (x86)\\MySQL\\MySQL Server 5.5\\bin\\mysqldump.exe";
                    ProcessBuilder pb = new ProcessBuilder(comando, "--user=root", "--password=1234", "cartoes", "--result-file=" + arquivo);
                    pb.start();
                    JOptionPane.showMessageDialog(this, "Cópia de segurança realizada com sucesso", "Backup", JOptionPane.CLOSED_OPTION);

                } else {
                    while (bck.isFile()) {
                        numerodobackup++;

                        bck = new File(arquivo + numerodobackup);
                        novonome = String.valueOf(bck);
                    }

                    String comando = "C:\\Program Files (x86)\\MySQL\\MySQL Server 5.5\\bin\\mysqldump.exe";
                    ProcessBuilder pb = new ProcessBuilder(comando, "--user=root", "--password=1234", "cartoes", "--result-file=" + novonome);
                    pb.start();
                    JOptionPane.showMessageDialog(this, "Cópia de segurança realizada com sucesso!", "Backup", JOptionPane.CLOSED_OPTION);
                    //dispose();

                }
            } catch (Exception e) {
                JOptionPane.showMessageDialog(null, e, "Cópia de Segurança não pode ser realizada!!", 2);
            }
        }

espero que ajude!

desculpe pela demora para a resposta, o metodo que voce passou funcionou perfeitamente

muito Obrigado !