Вы находитесь на странице: 1из 8

INSTITUTO TECNOLGICO DE LZARO CRDENAS

Departamento de Sistemas y Computacin


PRCTICAS DE LABORATORIO

CARRERA
INGENIERIA EN
SISTEMAS
COMPUTACIONALES
PRCTICA No.
05

PLAN DE ESTUDIO CLAVE ASIGNATURA


ISC-2004-296

NOMBRE DE LA ASIGNATURA

TBD

LABORATORIO DE
NOMBRE DE LA
PRCTICA

Taller de Base de datos

CENTRO DE COMPUTO

DURACIN (HORA)

Transacciones

2 Horas

1. INTRODUCCIN

Una transaccin es una unidad nica de trabajo. Si una transaccin tiene xito, todas las modificaciones de los datos
realizadas durante la transaccin se confirman y se convierten en una parte permanente de la base de datos. Si una
transaccin encuentra errores y debe cancelarse o revertirse, se borran todas las modificaciones de los datos.
Un ejemplo habitual de transaccin es el traspaso de una cantidad de dinero entre cuentas bancarias. Normalmente se
realiza mediante dos operaciones distintas, una en la que se decrementa el saldo de la cuenta origen y otra en la que
incrementamos el saldo de la cuenta destino. Para garantizar la consistencia del sistema (es decir, para que no aparezca o
desaparezca dinero), los dos operaciones deben ser atmicas, es decir, el sistema debe garantizar que, bajo cualquier
circunstancia (incluso una cada del sistema), el resultado final es que, o bien se han realizado las dos operaciones, o bien
no se ha realizado ninguna.

2. OBJETIVO (COMPETENCIA)
Conocer la forma de realizar una transaccin en el DBMS de MySQL, utilizando el lenguaje de programacin JAVA y la
interfaz API JDBC.

Elabor

Pgina 1 de
8

INSTITUTO TECNOLGICO DE LZARO CRDENAS


Departamento de Sistemas y Computacin
PRCTICAS DE LABORATORIO

3. FUNDAMENTO
Una transaccin en un sistema de gestin de bases de datos ( SGBD), es un conjunto de rdenes que se ejecutan
formando una unidad de trabajo, es decir, en forma indivisible o atmica.
Un SGBD se dice transaccional si es capaz de mantener la integridad de los datos, haciendo que estas transacciones no
puedan finalizar en un estado intermedio. Cuando por alguna causa el sistema debe cancelar la transaccin, empieza a
deshacer las rdenes ejecutadas hasta dejar la base de datos en su estado inicial (llamado punto de integridad), como si la
orden de la transaccin nunca se hubiese realizado.
Para esto, el lenguaje de consulta de datos SQL (Structured query language), provee los mecanismos para especificar
que un conjunto de acciones deben constituir una transaccin.

BEGIN TRAN: Especifica que va a empezar una transaccin.

COMMIT TRAN: Le indica al motor que puede considerar la transaccin completada con xito.

ROLLBACK TRAN: Indica que se ha alcanzado un fallo y que debe restablecer la base al punto de integridad.
En un sistema ideal, las transacciones deberan garantizar todas las propiedades ACID; en la prctica, a veces alguna de
estas propiedades se simplifica o debilita con vistas a obtener un mejor rendimiento.
OPERACIONES PRINCIPALES:
COMMIT
En una transaccin, la operacin Commit (accin de cometer o asignar) se refiere a la idea de hacer que un conjunto de
cambios "tentativos, o no permanentes" se conviertan en permanentes.
Una sentencia COMMIT en SQL finaliza una transaccin de base de datos dentro de un Sistema Gestor de Base de Datos
Relacional (RDBMS) y pone visibles todos los cambios a otros usuarios. El formato general es emitir una sentencia
BEGIN WORK, una o ms sentencias SQL, y entonces la sentencia COMMIT. Alternativamente, una sentencia
ROLLBACK se puede emitir, la cual deshace todo el trabajo realizado desde que se emiti BEGIN WORK. Una sentencia
COMMIT publicar cualquiera de los savepoints(puntos de recuperacin) existentes que puedan estar en uso.

Elabor

Pgina 2 de
8

INSTITUTO TECNOLGICO DE LZARO CRDENAS


Departamento de Sistemas y Computacin
PRCTICAS DE LABORATORIO

ROLLBACK
En una transaccin, un rollback es una operacin que devuelve a la base de datos a algn estado previo. Los Rollbacks
son importantes para la integridad de la base de datos, a causa de que significan que la base de datos puede ser restaurada
a una copia limpia incluso despus de que se han realizado operaciones errneas. Ellas son cruciales para la recuperacin
de crashes de un servidor de base de datos; realizando rollback(devuelto) cualquier transaccin que estuviera activa en el
tiempo del crash, la base de datos es restaurada a un estado consistente.
En SQL, ROLLBACK es un comando que causa que todos los cambios de datos desde la ltima sentencia BEGIN WORK,
o START TRANSACTION sean descartados por el sistema de gestin de base de datos relacional (RDBMS), para que el
estado de los datos sea "rolled back"(devuelto) a la forma en que estaba antes de que aquellos cambios tuvieran lugar.
En muchos lenguajes de SQL, ROLLBACKs son especficos de la conexin. Esto significa que si se hicieron dos
conexiones a la misma base de datos, un ROLLBACK hecho sobre una conexin no afectar a cualesquiera otras
conexiones. Esto es vital para el buen funcionamiento de la Concurrencia

Los ResulSet pueden tener o no desplazamiento y pueden ser sensibles o no a los cambios en la base de datos que pueden
producir otros usuarios o procesos.
Tipos de ResultSet:
TYPE_FORWARD_ONLY

Slo se puede recorrer hacia adelante y no es sensible a cambios en base de datos.

TYPE_SCROLL_INSENSITIVE

Tiene desplazamiento (adelante/atrs), pero es insensible a cambios en base de datos.

TYPE_SCROLL_SENSITIVE

Tiene desplazamiento (adelante/atrs) y es sensible a cambios en base de datos.

Con el siguiente cdigo comprobamos que el ResultSet tenga desplazamiento:


DatabaseMetaData dbmd = con.getMetaData();
if ( dbmd.supportsResultSetType( ResultSet.TYPE_FORWARD_ONLY ) )
System.out.println("Esta base de datos no admite scroll");

else
System.out.println("Esta base de datos admite scroll");

Tambin podemos saber el tipo de un conjunto mediante un mtodo de ResulSet:


public int getType()
Que devuelve el tipo en la forma de las constantes antes descritas: TYPE_FORWARD_ONLY, etc.

Elabor

Pgina 3 de
8

INSTITUTO TECNOLGICO DE LZARO CRDENAS


Departamento de Sistemas y Computacin
PRCTICAS DE LABORATORIO

Resumen sobre los tipos de ResultSet


static int CLOSE_CURSORS_AT_COMMIT
The constant indicating that ResultSet objects should be closed when the method Connection.commit is called.
static int CONCUR_READ_ONLY
The constant indicating the concurrency mode for a ResultSet object that may NOT be updated.
Es un ResultSet de slo lectura. Es el valor por defecto
static int CONCUR_UPDATABLE
The constant indicating the concurrency mode for a ResultSet object that may be updated.
Permite realizar modificaciones sobre los datos que contiene el ResultSet.
static int FETCH_FORWARD
The constant indicating that the rows in a result set will be processed in a forward direction; first-to-last.
static int FETCH_REVERSE
The constant indicating that the rows in a result set will be processed in a reverse direction; last-to-first.
static int FETCH_UNKNOWN
The constant indicating that the order in which rows in a result set will be processed is unknown.
static int HOLD_CURSORS_OVER_COMMIT
The constant indicating that ResultSet objects should not be closed when the method Connection.commit is called.
static int TYPE_FORWARD_ONLY
The constant indicating the type for a ResultSet object whose cursor may move only forward.
Es un tipo de ResultSet con movimiento nicamente hacia delante (forward-only). Es el tipo de ResultSet por defecto.
static int TYPE_SCROLL_INSENSITIVE
The constant indicating the type for a ResultSet object that is scrollable but generally not sensitive to changes made by
others.
Permite todo tipo de movimientos. Pero este tipo de ResultSet, mientras est abierto, no ser consciente de los cambios que
se realicen sobre los datos que est mostrando, y por lo tanto no mostrar estas modificaciones.
static int TYPE_SCROLL_SENSITIVE
The constant indicating the type for a ResultSet object that is scrollable and generally sensitive to changes made by
others.

Permite todo tipo de movimientos, y adems permite ver los cambios que se realizan sobre los datos que
contiene.
4. PROCEDIMIENTO (DESCRIPCIN)
EQUIPO NECESARIO

MATERIAL DE APOYO

Una Computadora Personal en RED con conexin a


Internet.

Software JDK Java, Driver JDBC-MySQL, JCreator u


otro.

Elabor

Pgina 4 de
8

INSTITUTO TECNOLGICO DE LZARO CRDENAS


Departamento de Sistemas y Computacin
PRCTICAS DE LABORATORIO

DESARROLLO DE LA PRCTICA
Para comprender mejor las transacciones en base de datos, editar y compilar el siguientes programa. Considerar
previamente la creacin de la base de datos y configuraciones necesarias.
Programa 1:

Elabor

Pgina 5 de
8

INSTITUTO TECNOLGICO DE LZARO CRDENAS


Departamento de Sistemas y Computacin
PRCTICAS DE LABORATORIO

Programa 2:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Timestamp;
public class Transaction
{
Connection connection;
public Transaction()
{
try
{
Class.forName("com.mysql.jdbc.Driver").newInstance();
connection = DriverManager.getConnection
("jdbc:mysql://192.168.1.25/accounts?user=spider&password=spider");
}
catch (Exception e)
{
System.err.println("Unable to find and load driver");
System.exit(1);
}
}
public void doWork()
{
try
{
java.util.Date now = new java.util.Date();

connection.setAutoCommit(false);
Statement statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
ResultSet rs = statement.executeQuery("SELECT * FROM acc_add
WHERE acc_id = 1034055 and ts = 0");
rs.next();
rs.updateTimestamp("ts", new Timestamp(now.getTime())); //cantidad de segundos

Elabor

Pgina 6 de
8

INSTITUTO TECNOLGICO DE LZARO CRDENAS


Departamento de Sistemas y Computacin
PRCTICAS DE LABORATORIO

// Timestamp es el nmero de segundos que han transcurrido desde las 0 horas del 1 de enero de 1970 GMT.
rs.updateRow();
rs.moveToInsertRow();
rs.updateInt("add_id", rs.getInt("add_id"));
rs.updateInt("acc_id", rs.getInt("acc_id"));
rs.updateString("name", rs.getString("name"));
rs.updateString("address1", "555 East South Street");
rs.updateString("address2", "");
rs.updateString("address3", "");
rs.updateString("city", rs.getString("city"));
rs.updateString("state", rs.getString("state"));
rs.updateString("zip", rs.getString("zip"));
rs.updateTimestamp("ts", new Timestamp(0));
rs.updateTimestamp("act_ts", new Timestamp(now.getTime()));
rs.insertRow();

connection.commit();
rs.close();
statement.close();
connection.close();
} catch (Exception e) {
try {
connection.rollback();
} catch (SQLException error) {
}
e.printStackTrace();
}
}
public static void main(String[] args) {
Transaction trans = new Transaction();
trans.doWork();
}
}

Elabor

Pgina 7 de
8

INSTITUTO TECNOLGICO DE LZARO CRDENAS


Departamento de Sistemas y Computacin
PRCTICAS DE LABORATORIO

CLCULOS Y ACTIVIDADES
1.

Realizar la creacin de una base de datos para el ejemplo 1, utilizando MySQL GUI Tools o JDBC SQL.

2.

Agregar 5 registros a la base de datos previamente creada utilizando una herramienta MySQL.

3.

Describir los resultados obtenidos del ejemplo 1.

4.

Realizar la creacin de una base de datos para el ejemplo 2, utilizando MySQL GUI Tools o JDBC SQL.

5.

Agregar 5 registros a la base de datos previamente creada utilizando una herramienta MySQL. Considerar los
requerimientos de datos para el ejemplo 2.

6.

Cul es la diferencia entre el programa ejemplo 1 y el programa ejemplo 2 ?.

5. RESULTADOS Y CONCLUSIONES
Describir en este apartado los resultados obtenidos, utilizar pantallas de salida, describiendo cada una de ellas.

6. ANEXOS
Anexar la informacin que utiliz para profundizar en el tema de la prctica.

7. BIBLIOGRAFIA Y REFERENCIAS
Anotar la bibliografa utilizada, Internet, manuales, etc.

Elabor

Pgina 8 de
8

Вам также может понравиться