Está en la página 1de 7

Universidad Tecnológica de Puebla

Alumno:
Crespo Reyes Iván

Materia:
Base de Datos para Aplicaciones

Profesora:
Mather Xóchitl Mendoza Píscil

Actividad:
Cuestionario

1. Describir que es una transacción en Base de Datos:


Definición de transacción: conjunto de operaciones (de lectura y actualización) que se
ejecutan como una unidad indivisible de trabajo. La transacción finaliza su ejecución
confirmando o cancelando los cambios realizados sobre la base de datos.
Técnicamente las transacciones base de datos delimitan un conjunto de operaciones de
base de datos (es decir, sentencias SQL), que son procesadas como un todo, de forma
que las operaciones que están incluidas dentro de esas transacciones base de datos se
validan (commit) o se cancelan (rollback) como una única operación.

Ficha Bibliográfica:
http://www.diegocalvo.es/transacciones-en-los-sistemas-gestores-de-base-de-datos/
https://blog.powerdata.es/el-valor-de-la-gestion-de-datos/transacciones-base-de-datos-y-
su-importancia-al-migrar-a-la-nube
https://www.campusmvp.es/recursos/post/Fundamentos-de-SQL-Transacciones.aspx

2. Características de una transacción:


Las transacciones siguen cuatro propiedades básicas, bajo el acrónimo ACID (Atomicity,
Consistency, Isolation, Durability):

 Atomicidad: aseguran que todas las operaciones dentro de la secuencia de


trabajo se completen satisfactoriamente. Si no es así, la transacción se
abandona en el punto del error y las operaciones previas retroceden a su
estado inicial.
 Consistencia: aseguran que la base de datos cambie estados en una
transacción exitosa.
 Aislamiento: permiten que las operaciones sean aisladas y transparentes
unas de otras.
 Durabilidad: aseguran que el resultado o efecto de una transacción
completada permanezca en caso de error del sistema.

Ficha Bibliográfica:
https://diego.com.es/transacciones-en-sql

3. Ejemplo de una transacción en Java:


Proyecto Netbeans
Nuestro proyecto base será el siguiente:
 Le añadimos el conector JDBC al proyecto.
 Tenemos una clase llamada Database.java que nos permite conectarse a la base
de datos MySQL.
 Tenemos dos clases Main, JNoRollback y JRollback, en la segunda clase con el
uso de estos 2 métodos, el fin es apreciar mejor que pasa cuando se produce un
error al ejecutar estas transacciones.

Clase Database.java

package app;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
* @web https://www.jc-mouse.net/
* @author Mouse
*/
public class Database {

private final static String bd = "BASE_DE_DATOS";


private final static String login = "USUARIO";
private final static String password = "CONTRASEÑA";
private final static String url = "jdbc:mysql://localhost/"+bd;

public static Connection getConnection(){


try{
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(url,login,password
);
if (conn!=null){
System.out.println("Conectado a la base de datos ["+bd+"]");
}
return conn;
}catch(SQLException e){
System.err.println(e.getMessage());
}catch(ClassNotFoundException e){
System.err.println(e.getMessage());
}
return null;
}

Clase JRollback.java

01 package app;
02
03 import java.sql.Connection;
04 import java.sql.PreparedStatement;
05 import java.sql.SQLException;
06 /**
07 * @web http://jc-mouse.net/
08 * @author Mouse
09 */
10 public class JRollback {
11
12 public static void main(String[] args) {
13
14 //Obtenemos conexion a la base de datos
15 Connection connection = Database.getConnection();
16
17 PreparedStatement stmt1=null;
18 PreparedStatement stmt2=null;
19
20 try {
21 //se deshabilita el modo de confirmación automática
22 connection.setAutoCommit(false);
23 //Se preparan las sentencias SQL
24 stmt1 = connection.prepareStatement("INSERT INTO miTabla V
ALUES( ?, ? );");
25 stmt2 = connection.prepareStatement("INSERT INTO miOtraTab
la VALUES( ?, ?, ? );");
26
27 System.out.println( "Primer INSERT tabla [miTabla] " );
28 stmt1.setString(1, "000001");
29 stmt1.setString(2, "micorreo@mail.com");
30 stmt1.executeUpdate();
31
32 System.out.println( "Segundo INSERT tabla [miTabla] " );
33 stmt1.setString(1, "000002");
34 stmt1.setString(2, "amayuya@mail.com");
35 stmt1.executeUpdate();
36
37 System.out.println( "Tercer INSERT tabla [miTabla] " );
38 stmt1.setString(1, "000003");
39 stmt1.setString(2, "diosdado@mail.com");
40 stmt1.executeUpdate();
41
42 System.out.println( "Primer INSERT tabla [miOtraTabla]" );
43 stmt2.setString(1, "Juan");
44 stmt2.setString(2, "Perez");
45 //stmt2.setInt(3, 99); //Tipo de dato CORRECTO INT
46 stmt2.setString(3, "Hola soy un error");//Tipo de dato INC
ORRECTO
47 stmt2.executeUpdate();
48
49 //se indica que se deben aplicar los cambios en la base de
datos
50 connection.commit();
51
52 } catch (SQLException ex) {
53 System.err.println("ERROR: " + ex.getMessage());
54 if(connection!=null)
55 {
56 System.out.println("Rollback");
57 try {
58 //deshace todos los cambios realizados en los dato
s
59 connection.rollback();
60 } catch (SQLException ex1) {
61 System.err.println( "No se pudo deshacer" + ex1.ge
tMessage() );
62 }
63 }
64 }finally{
65 System.out.println( "cierra conexion a la base de datos" )
;
66 try {
67 if(stmt1!=null) stmt1.close();
68 if(stmt2!=null) stmt2.close();
69 if(connection!=null) connection.close();
70 } catch (SQLException ex) {
71 System.err.println( ex.getMessage() );
72 }
73 }
74
75 }//end:main
76 }

Explicación:
22: Se deshabilita el modo de confirmación automática, es decir todas las instrucciones
SQL a partir de ese punto se agrupan en una sola transacción que finalizara con una
llamada al método commit o al método rollback.
45: Este es el tipo de dato correcto que acepta la instrucción SQL, para usarlo des-
comenta y comenta la línea de código 46
46: El error de tipo de dato es el mismo que de la clase anterior
50: Aquí hacemos uso del método commit (), es decir si se llega hasta este punto quiere
decir que no se encontró ningún error y por tanto todas las instrucciones SQL (en este
caso INSERT) serán confirmadas.
59: Si se produce alguna excepción, se hará un llamado al método rollback () este método
deshace todos los cambios realizados en la transacción actual y libera cualquier bloque
en la base de datos que contenga en esos momentos este objeto
64: Para terminar se cierra la conexión actual a la base de datos
Ejecutando esta clase obtenemos la siguiente salida en pantalla:
Como en el caso anterior provocamos una excepción, sin embargo en esta oportunidad la
transacción no llega a ser confirmada (commit) y es anulada por el método rollback. Si
nos fijamos en nuestra base de datos, veremos que tanto en la tabla «miTabla» y
«miOtraTabla» no se registró nada.

Ficha Bibliográfica:
https://www.jc-mouse.net/java/transacciones-uso-de-commit-y-rollback

4. En una tabla definir clases y métodos que presentan tu ejemplo en Java

Clases / Métodos Descripción


class Database Nos permite conectarse a la base de datos
MySQL.
Connection getConnection Ejecuta la conexión a la base de datos
mediante Java.
class JRollback Realiza una operación de reversión,
deshace todos los cambios realizados por
la transacción actual. En este caso el
commit.
connection.commit Indica que se deben aplicar los cambios
en la base de datos

También podría gustarte