Bom dia fiz uma aplicação swing para fazer backup e restaurar mysql backups

Bom dia fiz uma aplicação swing para fazer backup e restaurar mysql backups

gostaria de colocar um jbutton e um Jtextfield para indicar o nome do banco de dados, para quando clicasse ele criasse um banco de dados!
Como faria isso

Eis a aplicação

package visual;

import java.io.File;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;

public class BackupBancoDados extends javax.swing.JFrame {

    public BackupBancoDados() {
        initComponents();
        JFC_Salvar_Backup.setVisible(false);

    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {
        java.awt.GridBagConstraints gridBagConstraints;

        jFileChooser1 = new javax.swing.JFileChooser();
        jLabel1 = new javax.swing.JLabel();
        JB_Backup = new javax.swing.JButton();
        JFC_Salvar_Backup = new javax.swing.JFileChooser();
        JB_Restaurar = new javax.swing.JButton();

        jLabel1.setText("jLabel1");

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Backup do Sistema");
        setResizable(false);
        getContentPane().setLayout(new java.awt.GridBagLayout());

        JB_Backup.setIcon(new javax.swing.ImageIcon(getClass().getResource("/image/bkp.png"))); // NOI18N
        JB_Backup.setText("Fazer Backup");
        JB_Backup.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                JB_BackupActionPerformed(evt);
            }
        });
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.gridheight = 2;
        gridBagConstraints.ipadx = 20;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
        gridBagConstraints.insets = new java.awt.Insets(70, 64, 0, 115);
        getContentPane().add(JB_Backup, gridBagConstraints);

        JFC_Salvar_Backup.setDialogType(javax.swing.JFileChooser.SAVE_DIALOG);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.ipadx = -558;
        gridBagConstraints.ipady = -365;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
        gridBagConstraints.insets = new java.awt.Insets(66, 10, 0, 0);
        getContentPane().add(JFC_Salvar_Backup, gridBagConstraints);

        JB_Restaurar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/image/restore.png"))); // NOI18N
        JB_Restaurar.setText("Restaurar Backup");
        JB_Restaurar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                JB_RestaurarActionPerformed(evt);
            }
        });
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 2;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
        gridBagConstraints.insets = new java.awt.Insets(37, 64, 53, 115);
        getContentPane().add(JB_Restaurar, gridBagConstraints);

        setSize(new java.awt.Dimension(446, 344));
        setLocationRelativeTo(null);
    }// </editor-fold>                        

    private void JB_BackupActionPerformed(java.awt.event.ActionEvent evt) {                                          
        // Botão Backup
        try {
            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 file = new File(arquivo);

                if (file.exists()) {
                    Object[] options = {"Sim", "Não"};
                    int opcao = JOptionPane.showOptionDialog(null, "Este arquivo já existe. Quer sobreescrever este arquivo?", "Atenção!!!",
                            JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[0]);
                    if (opcao == JOptionPane.YES_OPTION) {
                        Runtime bck = Runtime.getRuntime();
                        bck.exec("C:/wamp/bin/mysql/mysql5.6.17/bin/mysqldump.exe -v -v -v --host=localhost --user=root --password=suasenha --port=3306 --protocol=tcp --force --allow-keywords --compress  --add-drop-table --default-character-set=latin1 --hex-blob  --result-file=" + arquivo + " --databases seubanco");
                        JOptionPane.showMessageDialog(null, "Backup realizado com sucesso.", "Tudo OK!", 1);
                    } else {
                        JB_BackupActionPerformed(evt);
                    }
                } else {

                    Runtime bck = Runtime.getRuntime();
                    bck.exec("C:/wamp/bin/mysql/mysql5.6.17/bin/mysqldump.exe -v -v -v --host=localhost --user=root --password=suasenha--port=3306 --protocol=tcp --force --allow-keywords --compress  --add-drop-table --default-character-set=latin1 --hex-blob  --result-file=" + arquivo + " --databases seubanco");
                    JOptionPane.showMessageDialog(null, "Backup realizado com sucesso.", "Tudo OK!", 1);
                }
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e, "Erro!", 2);
        }
    }                                         

    private void JB_RestaurarActionPerformed(java.awt.event.ActionEvent evt) {                                             
        try {
            JFileChooser pathFile = new JFileChooser();
            pathFile.showDialog(this, null);
            File bkp = pathFile.getSelectedFile();
            String pathBkp = bkp.toString();
            String restauraBkp = "cmd /c C:/wamp/bin/mysql/mysql5.6.17/bin/mysql --user=root --password=suasenha seubanco<" + pathBkp;
            Runtime.getRuntime().exec(restauraBkp);
            JOptionPane.showMessageDialog(null, "Restauração realizado com sucesso.", "Tudo OK!", 1);
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e, "Erro!", 2);
        }


    }                                            

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new BackupBancoDados().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify                     
    private javax.swing.JButton JB_Backup;
    private javax.swing.JButton JB_Restaurar;
    private javax.swing.JFileChooser JFC_Salvar_Backup;
    private javax.swing.JFileChooser jFileChooser1;
    private javax.swing.JLabel jLabel1;
    // End of variables declaration                   
}

image

Achei este código muito bom porem ele é tipo console, gostaria de converter para swing como colocar um jtextfield e um jbutton

package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

/**
 *
 * @author Max
 */
public class Jdbc {

    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
    static final String DB_URL = "jdbc:mysql://localhost";

    static final String USER = "root";
    static final String PASS = "suasenha";

    public static void main(String[] args) throws Exception {
        Connection conn = null;
        Statement stm = null;

        Class.forName(JDBC_DRIVER);

        conn = DriverManager.getConnection(DB_URL, USER, PASS);
        stm = conn.createStatement();

        String sql = "create database IF NOT EXISTS tecnopoint";
        stm.executeUpdate(sql);
        if (sql != null) {
            System.out.println("banco de dados criado com sucesso");
        } else {
            System.out.println("banco de dados ja estava criado");
        }
         System.out.println(stm.executeUpdate(sql));

        stm.close();

    }

}

1 - Abra o netbeans (affff)
2 - Arraste os componentes que quer
3 - Defina um nome para os componentes
4 - Defina a ação que deseja para o jbutton

ja tentei, mas não consegui :cry: mas vou tentar novamente, obrigado pela luz

Não consegui, para mim, é desculpa de quem não quer fazer.
Até por que, se não conseguiu, por que não detalha a razão pela qual não conseguiu? Ocorre erro? Não funciona? Ser específico e mostrar o que fez ajuda.

Não consegui pode significa que tentou e não conseguiu,
mas agora consegui, tentei novamente e consegui,

 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        Connection conn = null;
        Statement stm = null;

        try {
            Class.forName(JDBC_DRIVER);

            conn = DriverManager.getConnection(DB_URL, USER, PASS);
            stm = conn.createStatement();

            String sql = "create database IF NOT EXISTS tecnopoint";
            stm.executeUpdate(sql);
            if (sql != null) {
                System.out.println("banco de dados criado com sucesso");
            } else {
                System.out.println("banco de dados ja estava criado");
            }
            System.out.println(stm.executeUpdate(sql));

            stm.close();
        } catch (Exception e) {
        }

    }  

agora a dúvida é o seguinte ja que o banco foi criado quando clico no botão criar novamente, ele deveria informar que o banco ja foi criado e não tem necessidade alguem pode me corrigir o que errei por favor.

se eu clicar 5 vezes ele sempre informa "banco de dados criado com sucesso"

Melhorei mais o código

image

agora posso digitar o nome do banco com o qual eu quero criar

private void jbtn_criar_bancoActionPerformed(java.awt.event.ActionEvent evt) {
Connection conn = null;
Statement stm = null;
String NomeBanco = jTNomeBanco.getText();

try {
    Class.forName(JDBC_DRIVER);

    conn = DriverManager.getConnection(DB_URL, USER, PASS);
    stm = conn.createStatement();

    String sql = "create database IF NOT EXISTS " + NomeBanco;
    stm.executeUpdate(sql);
    if (sql != null) {
        System.out.println("banco de dados criado com sucesso");
    } else {
        System.out.println("banco de dados ja estava criado");
    }
    System.out.println(stm.executeUpdate(sql));

    stm.close();
} catch (Exception e) {
}

}

Mas a dúvida ainda persiste pq sempre da o mesmo resultado
se eu clicar quantas vezes for necessário ele sempre informa "banco de dados criado com sucesso"

Enquanto você tiver o “IF NOT EXISTS”, vai sempre retornar sucesso.

Testei mas não deu certo, oq mudou é só da mensagem uma unica vez, que o banco foi criado, somente

Cara, sinto um grande fetiche pela frase “não deu certo”, hein?
Pensou se Thomas Edison tivesse desistido da ideia de uma lâmpada elétrica no primeiro revés? (Ele tentou mais de 700 vezes!!!)

Pelo código que postou, ao tentar executar a parte de criar um banco com nome já existente deveria lançar exceção. Se isso não ocorreu, você fez algo errado.

se eu tivesse desistido nao haveria este código

como vc me recomendou tirar o IF NOT EXISTS, tirei e não funcionou,
Sou Thomas Edison vou tentar 700 x 7

Cara, eu recomendei pois se você mantivesse aquele trecho, o código rodaria sempre, afinal, ele bateria no mysql e não retornaria erro, pois o banco existe e a execução foi abortada, sem erros.
A ideia de remover aquele trecho é de receber um erro.

entendi

alterei o código para isso

    Class.forName(JDBC_DRIVER);

    conn = DriverManager.getConnection(DB_URL, USER, PASS);
    stm = conn.createStatement();

    String sql = "create database " + NomeBanco;
    stm.executeUpdate(sql);
    if (sql != null) {
       JOptionPane.showMessageDialog(null, "banco de dados criado com sucesso");
    } else if (sql == null){
        JOptionPane.showMessageDialog(null, "banco de dados ja estava criado");
        System.out.println("banco de dados ja estava criado");
    }
    System.out.println(stm.executeUpdate(sql));
    stm.close();
} catch (Exception e) {
}

mas, eu coloco um nome da banco de dados que nao foi criado, ele me retorna banco de dados criado com sucesso até ai blz, mas se eu clico de novo deveria me retornar "banco de dados ja tinha sido criado"

não entendi o q esta errado

Você está testando o valor da variável String sql, ela nunca será nula seguindo a lógica do seu código, tu tem que pegar o retorno da execução dessa string sql na sua base de dados, e não da forma que está fazendo.

Perdoe me a ignorância e como eu faria isso?

O método executeUpdate retorna um valor inteiro, trate esse retorno nas suas condicionais.

https://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html

Consegui resolver obrigado @darlan_machado

O objeto sql que você cria com o código abaixo:

String sql = "create database " + NomeBanco;

Nunca vai ser null, então o if abaixo é desnecessário:

if (sql != null) {
   JOptionPane.showMessageDialog(null, "banco de dados criado com sucesso");
} else if (sql == null){
    JOptionPane.showMessageDialog(null, "banco de dados ja estava criado");
    System.out.println("banco de dados ja estava criado");
}

então melhor sql != 0

Não cara, não fica fazendo bobagens.
Veja que quem retorna o valor é a execução do método executeUpdate. Atribua o retorno desse método a uma variável e valide essa variável.

        int resultado = stm.executeUpdate(sql);
        if (resultado != 0) {
            JOptionPane.showMessageDialog(null, "banco de dados criado com sucesso");
        }