El problema es que tengo una aplicacion en Java que lee registros de una BD en SQL SERVER 2008 R2 y esos datos las envia a una BD en MySQL. El programa si hace lo que tiene que hacer. Pero quiero usar la funcion commit por si hubo algun problema a la hora de hacer las movidad de los datos de una base a otra se deshaga todo el cambio (rollback).
Leyendo vi que mis tablas que estan en MySQL deben tener el motor de InnoDB en vez de MyISAM que es el motor por default. Y tiene que ser InnoDB porque este si soporta la funcion commit , setAutoCommit (para ponerla en falso y a si no haga commit automaticamente) y la funcion rollback (para deshacer cualquier cambio por si salio algo mal en el commit). Pos mi problema es este que los datos no se guardan en las tablas de MySQL .
public Vector<Object[]> obtenerSomatometria() throws SQLException
{
Vector<Object[]> datos= new Vector<Object[]>();
datos.clear();
ResultSet valores;
try
{
conexion.crearConexionSQL();
//conexion.getConexion().setAutoCommit(false);
conexion.setSetenciaPreparada(
conexion.getConexion().prepareStatement(
"SELECT IDPaciente, IDDiccionario, cCve_Respuesta, cValor " +
"FROM somatometria" ) );
valores = conexion.ejecutarConsultaObtener();
while( valores.next() )
{
datos.addElement(
new Object[]
{
valores.getString( 1 ),valores.getString( 2 ),valores.getString( 3 ),
valores.getString( 4 )
}
);
}
//conexion.getSetenciaPreparada().close();
//conexion.cerrarConexion();
}
catch (SQLException ex)
{
JOptionPane.showMessageDialog( null, "ERROR DE EJECUCI\u00D3N DEL QUERY CONSULTAS obtenerPaciente SQLException \n\n" + ex.getMessage(), "ERROR DE SISTEMA 454", JOptionPane.ERROR_MESSAGE );
System.exit( 0 );
}
catch (ClassNotFoundException e)
{
JOptionPane.showMessageDialog( null, "EN CONSULTAS obtenerPaciente ClassNotFoundException \n\n" + e.getMessage() , "ERROR DE SISTEMA 459", JOptionPane.ERROR_MESSAGE );
System.exit( 0 );
}
catch( NullPointerException e)
{
JOptionPane.showMessageDialog( null, "EN CONSULTAS obtenerPaciente NullPointerException \n\n" + e.toString() , "ERROR DE SISTEMA 464", JOptionPane.ERROR_MESSAGE );
System.exit( 0 );
}
return datos;
}
public void exportarMySQL( Vector<Object[]> datos, int opcion ) throws SQLException
{
try
{
int indice = 1;
conexion.crearConexionMySQL();
for (Object[] objects : datos)
{
if( opcion == 1 )
{
conexion.setSetenciaPreparada(
conexion.getConexion().prepareStatement(
"INSERT INTO referencias ( IDReferencia,IDPaciente,IDUMedicaEnvia,IDUMedicaRef,cDescripcionRef,cServicio,cDiagnostico,cMotivoReferencia,cResumenClinico,cTratamiento,cFecha,IDMedico,cStatus,IdMotivo,cCompleta,dFecha_Cancelacion,IdPersonal_Cancela,cMotivo_Cancelacion,cUrgente,cNombreMedico,dFechaPrimeraAtencion,cStatusEnviado ) VALUES( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )"
)
);
}
else if( opcion == 2 )
{
conexion.setSetenciaPreparada(
conexion.getConexion().prepareStatement(
"INSERT INTO ContraReferencias (IDUMedica, IDContraReferencia, IDServicio, IDAreaMedica, cResumenClinico, cRecomendaciones, IDPersonal_Elabora, IDUnidadReferencia, IDReferencia, cObservaciones, dFecha_Reg, cStatus, dFecha_Cancelacion, IDPersonal_Cancela, cMotivo_Cancelacion, cNombreMedico, cStatusEnviado) VALUES( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )"
)
);
}
else
{
conexion.setSetenciaPreparada(
conexion.getConexion().prepareStatement(
"INSERT INTO Det_ContraReferencia_Diag ( IDUMedica,IDContraReferencia,IDDiagnostico,cDescripcion,cmotivocontrareferencia,IDReferencia ) VALUES( ?, ?, ?, ?, ?, ? )"
)
);
}
for( Object valores : objects )
{
conexion.getSetenciaPreparada().setObject( indice, valores );
++indice;
}
conexion.ejecutarConsultaModificar();
indice = 1;
}
//conexion.getSetenciaPreparada().close();
//conexion.cerrarConexion();
}
catch (SQLException ex)
{
JOptionPane.showMessageDialog( null, "ERROR DE EJECUCI\u00D3N DEL QUERY CONSULTAS exportarMySQL SQLException \n\n" + ex.getMessage(), "ERROR DE SISTEMA 131", JOptionPane.ERROR_MESSAGE );
System.exit( 0 );
}
catch (ClassNotFoundException e)
{
JOptionPane.showMessageDialog( null, " EN CONSULTAS exportarMySQL ClassNotFoundException \n\n" + e.getMessage(), "ERROR DE SISTEMA 136", JOptionPane.ERROR_MESSAGE );
System.exit( 0 );
}
catch( NullPointerException e)
{
JOptionPane.showMessageDialog( null, " EN CONSULTAS exportarMySQL NullPointerException \n\n" + e.toString(), "ERROR DE SISTEMA 141", JOptionPane.ERROR_MESSAGE );
System.exit( 0 );
}
}
Solo puse un poco de codigo de como lo estoy usando.
Y ese es mi problema que con InnoBD no esta gurdando nada pero sy cambio las tablas a MyISAM si se guardan los datos. pero el problema seria que si hay algun error los datos se salvarian incompletamente.
por eso lo de usar InnoDB.