Comencemos.
Vamos a la clase con el main ejemplo Jcsé te requi de transacciones bien y acá lo primero que tenemos
que implementar más arriba, por acá el manejo.
Recuerden por defecto el auto commit es en Trum quiere decir que cada sentencia que se ejecuta automáticamente
se refleja en la Cerrato automático por cada inser, por cada adblock.
En realidad, por cada vez que ejecutamos el método execute dáte del statement o statement va a realizar
esta operación y se va a llevar a cabo en la tabla.
Pero la idea se creó manejar transacciones con un bloque de código tal como lo tenemos ahora con el
insert acá con el arte.
Un poco más abajo se fijan un conjunto de sentencias.
Incluso tenemos consulta acá por Heidy litat acá después listar acá se fijan un grupo, un bloque de
ver sentencia, pero todas dentro de una misma transacción, como una sola.
Entonces acá tenemos que cambiar un poco, modificar el comportamiento por defecto.
Entonces vamos a subir.
Lo primero acá es cambiar acá conexión con punto set auto commit lo dejamos en fols.
Recuerden que true por defecto bien, pero igual por seguridad es conveniente primero validar si es
true, si es true, entonces lo cambiamos.
Rafols Pero podría ser fols.
Podría ser que en algún punto la aplicación lo hayamos cambiado fols.
Entonces es conveniente preguntar con un if con punto, get autocomplete acá lo tenemos, se fijan?
Y por acá any damos, bajamos y cerramos elif.
Entonces dice Thru lo cambiamos a forzo y listo.
Ahí está la conexión.
Entonces la idea que después, al final, acá, al final de toda la sentencia de este grupo, realizar
el ComitÃ, entonces con el con punto commit se fijan de forma manual explícita, de tal forma que si
falla por ejemplo el editar pero se lleva a cabo el insert realiza un rollback acá en el catch implementamos
el rollback y regresa al estado anterior.
Por lo tanto el insert no se refleja y no se ejecuta en la tabla enlazado.
En caso de que falle el editar o viceversa, si el insert falla, bueno, el editar tampoco se llevará
a cabo.
Incluso podemos tener mucho más operaciones entre medio.
Recuerden, es todo o nada bien acá igualmente vamos a tener algún inconveniente porque estamos cerrando
la conexión con el trade con recurso.
Acá se cierra de forma automática.
El problema es que se cierra acá dentro del try, pero en el catch la conexión va, está cerrada y ahí
vamos a tener un pequeño problema, porque al estar cerrada no podemos hacer un rollback.
Se fijan, no podemos volver atrás.
Por qué está cerrada con el recurso?
Pero.
Pero lo podemos presentar de otra forma.
Por ejemplo, tenemos un tris solamente para la conexión.
Este de acá que finaliza acá y dentro.
Vamos a tener otro try con un catch y ahí vamos a atrapar las opciones que tenemos acá en el repositorio.
Acá tenemos repositorio que podría lanzar excepciones y acá tengo que hacer otro cambio, porque en
cada método en eliminar, por ejemplo, pero más arriba tenemos guardar cada método maneja el try y
el catch.
Entonces acá lo que tenemos que hacer es quitar los catch, no realiza realizar manejo, excepción y
esto llevarlo al main, a la clase con el método main y tener un solo catch para todo el conjunto de
operaciones, para todo el conjunto de métodos y ahí realizar el rollback.
Entonces esto acá lo vamos a quitar y vamos a lanzar la excepción por el método.
Entonces ese otro paso que tenemos que implementar, pero había impactamos primero en orden, volvamos
donde estábamos, ejemplo transacciones.
Primero vamos a manejar el trae el catch anidado acá.
Entonces por acá un try.
Las llaves.
Vamos a bajar hasta el final.
Hasta acá y acá cerramos.
Un catch SQL Septón Exception x Exception.
Punto.
Vamos a imprimir la traza print stack 3 perfecto y acá podemos hacer el rollback.
Se fijan en este cacho con punto rollback.
Entonces commit si falla un rollback se fijan y damos acá dentro del troi de la conexión.
Incluso esto para qué mejor y más limpio lo podríamos quitar, o también lo podemos manejar tan bien
como queramos.
Pero cualquier error que ocurra, ya sea acá en el rollback, porque acá también nos pide manejar excepción.
O error acá en el auto commit en el que te instalas en la conexión.
Lo podríamos lanzar por el método, entonces podríamos agregar el catch o bien lanzar en el método main.
Entonces más acciones.
Agrega Exception era el método en la firma, el método y listo, queda mejor.
Queda más limpia.
Entonces acá tenemos el TRIE que anida todo de la conexión con el recurso trae un recurso.
Luego modificamos el auto commit a fols.
Trae.
Tras ejecutar este bloque hace un subcomité y en caso de falla rollback, regresamos al estado que tenía
antes original.
Es decir, todos los cambios que se habían realizado, por ejemplo en el insert, vuelven atrás y no
se realizan.
Vimos recién que también tuve que modificar el producto repositorio acá.
Quítalos catch claro, porque se lanza una excepción matear en este catch.
Y la idea es que entre en el catch del método main.
Acá en este caso para que realice el rollback, entonces sería el siguiente paso vamos a quitar todos.
Va a lanzar un error y está bien.
Entonces le agregamos más acciones.
Que lo lance en el método OK le ponemos ñez se fijan frus ese escepción lo lanza en el método, después
vamos a tener que modificar la interfaz.
Bueno, ahí vamos a ver esto lo modificamos también eliminar.
Lo mismo.
Más acciones.
Lanzar en la firma el método acá nos pregunta el método eliminar viene de una herencia, de una implementación
de la interfaz, se fijan y acá nos pregunta si queremos agregar de forma automática.
También en el método de la interfaz le ponemos que si, de hecho podríamos revisar si nos vamos a la
interfaz repositorio repositorio se fijan en guardar aparece el frus ese cual exception y elimina también
el por Heidy y el listar no lo tienen todavía.
Eso lo vamos a ver ahora.
Se fijan entonces acá también en por Heidi quitamos el catch.
Lo mismo más acciones agregar en la firma del método OK.
Si nos vamos a la interfaz agrego frus de cual es esto?
Está perfecto.
Y acá lo mismo quitamos el catch.
Y lo agregamos.
Ok.
Ya tenemos todo nuestro repositorio, la interfaz también.
Recuerden que los métodos de la interfaz tienen que ser idéntica, la firma a los métodos que estamos
implementando acá, entonces son la misma firma, misma nombre, método, el protocolo de implementación.
Y ahora sí que sí, ya tenemos listo el repositorio.
Quitamos los catch, ya que lo vamos a implementar acá para el rollback electo.
Ya tenemos todo implementado, ahora de otra forma el rollback.
Entonces todo acá más bien son operaciones del tipo Inser Aztec o delito, es decir, sentencias de
mele de data, manipulación languages más que de la consulta select.
Y acá recuerden, se está cerrando la conexión de forma automática.
Entonces siempre al finalizar estos bloque contrastación.
Al final hacemos el comic, pero en caso de que se ejecuti bien o de que falle después de Cacho, al
final se cierra la conexión por el TREC con recurso.
Entonces por eso lo tengo que manejar de esta forma con un traje anidado.
Cuando utilizamos un traje con recursos, ahora lo vamos a levantar.
Entonces con control cheff, F10, ejecutamos.
Recuerden, debiera lanzar algún error.
Vamos a ver.
Y debería ser un rollback.
Se fijan acá tenemos el error.
Acá se duplica la entrada a BCD un, dos, tres, cuatro, cinco, seis.
Revisemos.
Recuerden que el INSER está bien porque es a veces de E y ese no existe.
Así que lo debiese insertar bien, pero como hace un rollback, en realidad no lo insertar.
Y acá donde falla a veces de un, dos, tres, cuatro o cinco, seis, porque tenemos un producto que
tiene es ese cabo está duplicado.
Por eso se viola la integridad, el Constraint, una regla de rato.
Revisemos la base.
Bien, entonces en productos selecciona todos se fijan.
No insertó nada entre mostrar productos 7.
No hay un producto 8 para el rollback falló.
Si estuviéramos con auto comisio, por ejemplo en Thru.
Y no manejamos acá el CONMI ni tampoco el rollback.
Bueno, por supuesto que se va a insertar este de acá, pero acá no se actualizado, pero acá todo o
nada.
Es decir, se ejecuta el bloque completo o ninguna sentencia.
Vamos a modificar.
Acabas de colocar a veces de E. F.
Yo creo que acá también va tirar un error porque tenemos maddi de caracteres, se fijan 1, 2, 3,
4, 5, 6, 7, 8, 9, 10.
Claro, tengo más de dos caracteres.
Si ejecutamos, vamos a ver.
Las otro error data trum Ketcham, es decir, la información es demasiado larga para la columna.
Recuerden que es hasta 10 caracteres.
Entonces acá tenemos 3 6 y acá 4.
Todo lo quitamos.
Si tenemos 10, ahora, si el ejecutamos.
Debería estar perfecto.
Dailey inserta con el Heidy Dias, claro, por qué 10.
Qué pasa con el 8 y el 9?
Claro, ejecutamos 2 y las dos fallaron.
Pero los productos se insertaron, pero después con el rollback volvimos atrás y se eliminan de forma
automática, es decir, vuelve al estado original.
Pero si se incrementa de forma automática los saidi llega.
Tenemos teclado y BM mecánico con su propia llave.
Iete se modificó.
Entonces si revisamos el 5 teclado Corsair acá a veces de F 1 2 3 4 está perfecto.
La siguiente clase vamos a ver muy parecido, muy similar, pero utilizando un puzzle, conexiones y
una clase servis.
Aunque también lo podemos implementar en el método Main, tal como lo hicimos.
Pero tipicamente y como buena práctica, se recomienda trabajar con una clase de servicio para desacoplar
todo lo que esta lógica de negocio de la clase o del controlador de la clase con el método main.
Después vamos a ver, por ejemplo en una aplicación web vamos a tener un MBC modelo vista controlador
se presente capa.
El controlador se encarga todo lo que es manejar el request o solicitud HTTP y la respuesta hacia el
usuario se fijan.
El usuario envía datos, pero también estos datos se procesan en la lógica de negocio.
Se lo pasamos a la lógica negocio, al service, al repositorio.
No entrega el resultado y se lo pasamos de vuelta al usuario a través de la vista de un HTML o un Jaison
o cualquier representación, pero siempre se tiene que desacoplar todo lo que datos lógica negocio de
la clase controladora o en este caso del método main.
Entonces por eso mejor implementar un service y no tener todo esto de acá.
Por ejemplo en el main y implementar métodos en un service que agrupan varias sentencias, varias operaciones,
consultas en una misma transacción.
Nada más.
Continuamos en la siguiente clase.