sábado, 29 de marzo de 2014

Generación de Backup en Java

Hola, quiero compartir un ejemplo que permite generar Backup ó copias de respaldo de una BD y que me ha sido de gran ayuda al usarlo en aplicaciones que he desarrollado. Bueno Comencemos:

En el ejemplo muestro un ComboBox donde se listan todas las BD que tiene el motor de base de datos, en este ejemplo estamos trabajando con MySQL.

   private void ListaBD(){
      Connection con;
      PreparedStatement ps;
      ResultSet rs;
      try{
          //Preparamos la coneccion a la BD
         Class.forName("com.mysql.jdbc.Driver");
         con = DriverManager.getConnection("jdbc:mysql://localhost:3306","root","");
         //Preparamos consulta
         ps = con.prepareStatement("SHOW DATABASES");
         rs = ps.executeQuery();
         while(rs.next()){
             //Llenamos la lista 
            comboLista.addItem(rs.getObject(1));   
         }
      }
      catch(Exception e){
         JOptionPane.showMessageDialog(null, e.getMessage());
      }        
   }

Luego se crea el método para evento del boton "Backup", estamos usando un JFileChooser para especificar la ruta donde deseamos guardar nuestro backup.

   private void GenerarBackup(String bd){    
      //Creamos la ruta para guadar el backup
      int resp = FileChooser.showSaveDialog(this);   
      if(resp==JFileChooser.APPROVE_OPTION){
         //le añadimos la extencion *.sql
         dir=String.valueOf(FileChooser.getSelectedFile().toString())+".sql";      
         try{
            Runtime runtime = Runtime.getRuntime();
            File fichero = new File(dir);
            FileWriter fw = new FileWriter(fichero); 
            Process child = runtime.exec("C:/Archivos de programa/MySQL/MySQL Server 5.1/bin/mysqldump --opt --password= --user=root --databases "+bd+" -R");
         
            //Process es el que ejecuta el comando para buscar el mysqldump.exe
            InputStreamReader irs = new InputStreamReader(child.getInputStream());
            BufferedReader br = new BufferedReader(irs);

             //Aquí espesamos a sobrescribir el archivo *.sql
            String line;
            while( (line=br.readLine()) != null){
               fw.write(line + "\n");
               System.out.println(""+ line);
            }
            msg.setText("Se ha creador un archivo *sql en la ruta: \n"+dir);
            fw.close();
            irs.close();
            br.close();
            JOptionPane.showMessageDialog(null, "Backup generado correctamente", "Operacion completada",JOptionPane.INFORMATION_MESSAGE);
         }
         catch(Exception e){
            e.printStackTrace();
            JOptionPane.showMessageDialog(null, "Error no se genero el backup por el siguiente motivo: " + e.getMessage(), "Verificar",JOptionPane.ERROR_MESSAGE);
         }
      }      

   }  

Nota: 
 Process child = runtime.exec("C:/Archivos de programa/MySQL/MySQL Server 5.1/bin/mysqldump --opt --password= --user=root --databases "+bd+" -R");
Es el que crea el proceso para ejecutar la consulta con el mysqldump, mi MySQL no tiene password pero si tuviera hay que ponerlo así: 

 Process child = runtime.exec("C:/Archivos de programa/MySQL/MySQL Server 5.1/bin/mysqldump --opt --password=tu_pass --user=user_bd --databases "+tu_bd+" -R");

Eso es todo y espero les ayude este post, aqui les dejo el ejemplo completo.

No hay comentarios:

Publicar un comentario