para mi practica de graduacion tuve que hacer algo como eso.. si te sirve usalo
package cr.ac.ucr.threading.dasedatos;
import java.io.BufferedInputStream;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.DefaultListModel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import cr.ac.ucr.conexion.Conexion;
import cr.ac.ucr.gui.InterfazRespaldos;
import cr.ac.ucr.util.FiltroArchivo;
import cr.ac.ucr.util.SesionUsuario;
import cr.ac.ucr.util.Tiempo;
/**
* @author Carlos Vega Gonzalez
* @author Osvaldo Gonzalez Hernandez
* @author Keylin Sosa Vargas
*
* @version 1.0
* 2006
*/
public class ThreadRespaldoRecuperacion extends Thread {
private JList jlstRespaldos = null;
private DefaultListModel modeloLista = null;
private InterfazRespaldos interfazRespaldos;
private Tiempo tiempo = new Tiempo();
private PreparedStatement transaccion;
private Conexion conexion;
private Connection db;
private int operacion;
private final String CARPETA_RESPALDOS =
"C:"+File.separator+"respaldoBaseDatos"+File.separator;
private final String ARCHIVO_RESPALDO = CARPETA_RESPALDOS +
tiempo.getDate().concat(".sql");
private final String COMANDO_RESPALDO =
"mysqldump --user=scec --password=scec scec";
private final String COMANDO_RESTAURACION =
"mysql --user=root --password=root -e \"source ";
private final String CREAR_USUARIO_APLICACION =
"grant all privileges on scec.* to 'scec' identified by 'scec' with grant option; \n" +
"set password for 'scec' = password('scec');";
private final String CREAR_BASE_DATOS =
"DROP DATABASE IF EXISTS `scec`; \n"+
"CREATE DATABASE `scec`; \n"+
"USE `scec`; \n";
private final int LOAD_RESPALDOS = 1, GENERAR_RESPALDO = 2,
RESTAURAR_BASE_DATOS = 3;
/**
* @param modeloLista
* @param operacion
*/
public ThreadRespaldoRecuperacion(DefaultListModel modeloLista,
int operacion) {
super();
this.modeloLista = modeloLista;
this.operacion = operacion;
}
/**
* @param interfazRespaldos
* @param modeloLista
* @param operacion
* @param jlstRespaldos
*/
public ThreadRespaldoRecuperacion(JList jlstRespaldos,
DefaultListModel modeloLista,InterfazRespaldos interfazRespaldos,
int operacion) {
super();
this.modeloLista = modeloLista;
this.interfazRespaldos = interfazRespaldos;
this.operacion = operacion;
this.jlstRespaldos = jlstRespaldos;
}
/* (non-Javadoc)
* @see java.lang.Thread#run()
*/
@Override
public void run() {
super.run();
switch(operacion)
{
case LOAD_RESPALDOS:
loadRespaldos();
break;
case GENERAR_RESPALDO:
generarRespaldo();
break;
case RESTAURAR_BASE_DATOS:
restaurarBaseDatos();
break;
}
}
private void generarRespaldo()
{
BufferedInputStream inputStream = null;
BufferedWriter bufferWriter = null;
File nuevoRespaldo = null;
Process process = null;
try{
int caracterLeido;
process = Runtime.getRuntime().exec(COMANDO_RESPALDO);
inputStream = new BufferedInputStream(process.getInputStream());
nuevoRespaldo = new File(ARCHIVO_RESPALDO);
if(!nuevoRespaldo.exists())
nuevoRespaldo.createNewFile();
else{
if(nuevoRespaldo.delete())
nuevoRespaldo.createNewFile();
}
bufferWriter = new BufferedWriter(new FileWriter(nuevoRespaldo.getAbsolutePath()));
bufferWriter.write(CREAR_BASE_DATOS);
while((caracterLeido = inputStream.read()) != -1)
bufferWriter.append((char)caracterLeido);
bufferWriter.write(CREAR_USUARIO_APLICACION);
bufferWriter.flush();
try{
process.waitFor();
}catch(InterruptedException e){
e.printStackTrace();
}
nuevoRespaldo = null;
nuevoRespaldo = new File(ARCHIVO_RESPALDO);
if(nuevoRespaldo.exists() && nuevoRespaldo.length() > 0)
{
modeloLista.clear();
loadRespaldos();
String sentencia ="Insert into tb_bitacora(NOMBRE, DescripcionSuceso, Fecha, " +
"Hora) values (?,?,?,?)";
try{
conexion = new Conexion();
if(conexion.getEstadoConexion())
db = conexion.getConnection();
transaccion = db.prepareStatement(sentencia);
transaccion.setString(1,SesionUsuario.usuario.getNombre());
transaccion.setString(2,
"Se ha realizado un backup de la Base de Datos, nombre del Backup = "
+ tiempo.getDate().concat(".sql"));
transaccion.setDate(3,tiempo.getFecha());
transaccion.setTime(4,tiempo.getHour());
transaccion.executeUpdate();
}catch(SQLException e){}
JOptionPane.showInternalMessageDialog(interfazRespaldos,
"El respaldo se realizo correctamente", interfazRespaldos.getTitle(),
JOptionPane.INFORMATION_MESSAGE);
}
else
JOptionPane.showInternalMessageDialog(interfazRespaldos,
"EL respaldo no se realizo adecuadamente",
interfazRespaldos.getTitle(), JOptionPane.ERROR_MESSAGE);
}catch(IOException e){e.printStackTrace();}
catch(IllegalThreadStateException e){e.printStackTrace();}
finally{
try{
inputStream.close();
bufferWriter.close();
nuevoRespaldo = null;
process.destroy();
}catch(IOException e){e.printStackTrace();}
}
}
private void loadRespaldos()
{
File respaldos = new File(CARPETA_RESPALDOS);
if(!respaldos.exists())
respaldos.mkdir();
File archivos[] = respaldos.listFiles(new FiltroArchivo("sql"));
if(archivos == null)
return;
for(int i=0; i<archivos.length; i++)
modeloLista.addElement(new String(archivos[i].getName()));
}
private void restaurarBaseDatos()
{
File archivoBat;
Process process = null;
boolean isError = false;
String sentencia=null;
ResultSet consulta = null;
if(jlstRespaldos.getSelectedIndex() == -1)
{
JOptionPane.showInternalMessageDialog(interfazRespaldos,
"Debe elejir un archivo para respaldar la Base de Datos",
interfazRespaldos.getTitle(),
JOptionPane.ERROR_MESSAGE);
return;
}
String comando = COMANDO_RESTAURACION +
CARPETA_RESPALDOS +
(String)jlstRespaldos.getSelectedValue()+
"\" scec";
archivoBat = new File(CARPETA_RESPALDOS+"restaurar.bat");
try{
if(!archivoBat.exists())
archivoBat.createNewFile();
else
if(archivoBat.delete())
archivoBat.createNewFile();
FileWriter escritorArchivo = new FileWriter(archivoBat);
escritorArchivo.write(comando);
escritorArchivo.flush();
process = Runtime.getRuntime().exec(comando);
process.waitFor();
conexion = new Conexion();
if(conexion.getEstadoConexion())
db = conexion.getConnection();
Statement canal = conexion.getStatement();
sentencia="select * from tb_usuario";
consulta = canal.executeQuery(sentencia);
if(consulta.next())
isError = true;
if(isError)
{
sentencia ="Insert into tb_bitacora(NOMBRE,
DescripcionSuceso, Fecha, " +
"Hora) values (?,?,?,?)";
transaccion = db.prepareStatement(sentencia);
transaccion.setString(1,SesionUsuario.usuario.getNombre());
transaccion.setString(2,
"Se ha realizado una restauracion de la Base de Datos, nombre del Backup elegido = " +
(String)jlstRespaldos.getSelectedValue());
transaccion.setDate(3,tiempo.getFecha());
transaccion.setTime(4,tiempo.getHour());
transaccion.executeUpdate();
JOptionPane.showInternalMessageDialog(interfazRespaldos,
"La restauracion se realizo correctamente", interfazRespaldos.getTitle(),
JOptionPane.INFORMATION_MESSAGE);
}
else
JOptionPane.showInternalMessageDialog(interfazRespaldos,
"La restauracion no se realizo adecuadamente",
interfazRespaldos.getTitle(), JOptionPane.ERROR_MESSAGE);
}catch(IOException e){ e.printStackTrace(); }
catch(IllegalThreadStateException e){ e.printStackTrace(); }
catch(SQLException e){ e.printStackTrace(); }
catch(InterruptedException e){ e.printStackTrace(); }
finally{
process.destroy();
}
}
/* (non-Javadoc)
* @see java.lang.Object#finalize()
*/
@Override
protected void finalize() throws Throwable {
super.finalize();
if(db != null)
db.close();
transaccion.close();
if(conexion != null)
conexion.cerrarConexion();
db = null;
conexion = null;
transaccion = null;
tiempo = null;
}