Está en la página 1de 18
UNIVERSIDAD NACIONAL TECNOLOGICA DE LIMA SUR, ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS EQS Docente: Ing. Diaz Leyva Teodoro ‘Tema: TRANSACCIONES Semana N‘04 Hay veces que no queremos que una sentencia tenga efecto a menos que otra también suceda. Por ‘ejemplo, cuando se registra un pedido de articulo, también se necesita que se registre el articulo con la Cantidad pedida hasta la fecha, es decir si se inserta un registro en la tabla pedido_encabezado, también eseamos que se inserte el 0 los registfos en la tabla _pedido_detalle. De otro modo, los datos serian inconsistentes. La forma para aseguramos que ocurren las dos acciones © que no ocurre ninguna es ulilizar una transaccién. Una transacci6n es un conjunto de una o mas sentencias que se ejecutan como una unidad, por eso o se ejecutan todas o no se ejecuta ninguna, Sintaxis: Ty { UWinicio de transaccién, en es la conexi6n a la base de datos on.setAutoCommit(false) /Otras instrucciones ieonfirmar transaccién en.commint(); Jeatch()t l'Cancelar transaccién en.rollBack(); jotras instrucciones de control Pagina { de 18 UNIVERSIDAD NACIONAL TECNOLOGICA DE LIMA SUR ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS Esquema de la base de datos tienda a utilizar: ree ioe oe | oem Le orn idee 30) 1 | | toe] rl sone maou pt ——— M1 perme | narc cree as ae pears) ee Sa een | omer | 1 P edpeaics Ber) = eee ee ee cana BAT) sf om Fiamaco (38) aac OAT ceareies| een ae romaece ws) Pagina 2 de 18 UNIVERSIDAD NACIONAL TECNOLOGICA DE LIMA SUR ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS escrpate Pre nase caren cunts ‘+ Enel paquete pe.com.empresa.utilitario creamos las clase Fecha public class Fecha { Public static java.sql.Date deStringaDate(String fecha){ ‘SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); java.uti.Date 61 =new java.util.Date(); Mecha del sistema ty di = sdt.parse(fecha);/id1 tiene la fecha del String } catch (ParseException ex) { Logger.getLogger(Fecha.class.getName())/og(Level.SEVERE, nul, ex); Java.sql.Date d2 = new java sql.Date(6!.getTime()); return 02; } Yifin de la clase fecha Pagina S de 18 UNIVERSIDAD NACIONAL TECNOLOGICA DE LIMA SUR ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS. ‘+ Enel paquete pe.com.empresa.bean creamos las siguientes clases: Public class Articulo { lipropiedades private int idarticulo; private int idcategoria; private String nombre: private String descripcion; private double precio; Jimetodos set y get Public String getDescripcion() return descripcion; ) Public void setDescripcion(String descripcion) { this.deseripcion = descripcion; ‘ublic int getldarticulo() { retum idarticulo; } public void setidarticuio(intidarticulo) { this.idarticulo = idarticulo;, } Public int getidcategoria() { return idcategor ) Public void setldcategoriatint idcategoria) { this ideategoria = idcategoria; ) Public String getNomibre(){ return nombre; } public void setNombre(String nombre) { this. nombre = nombre; i) public double getPrecio() { retum precio: ) Public void setPrecio(double precio) { this precio = precio; } ifn de la clase articulo Pagina 4 de 18 UNIVERSIDAD NACIONAL TECNOLOGICA DE LIMA SUR ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS public class Cliente { ‘Propiedades: Los atributos que contiene, private int idclionte; private String nombres; private String apellidos: private int idpais; private String email; lIMétodos: Se establecen los métodos get y set para acceder y modificar los atributos, public String getApellidos() ( return apeliidos; ) Public void setApeliidos(String apelidos) { this apellidos = apelidos; } public Sting getEmail() { return email } public void setEmail(Sting eral) { this.email = email; } public int getldcliente() { retum idcliente; ) Public void setidctiente(intidcliente) { this.idcliente = idcliente; ) Public int getidpais() { return idpais; ) Public void setidpais(intidpais) { this idpais = idpais; } Public String getNombres() { return nombres; } public void setNombres(String nombres) { this. nombres = nombres; } Yifin de ta clase cliente Pagina 5 de 18 UNIVERSIDAD NACIONAL TECNOLOGICA DE LIMA SUR ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS Public class Detalle ( lipropiedades private int iddetalle: private int idpedido; private int idarticulo; private double preci private int cantidad; private double subtotal: Jimetodos get se public int getCantidad\) { retum cantidad; } public void setCantidad(int cantidad) { this.cantidad = cantidad; ) public int getidarticulo() { return idarticulo; ) Public void setldarticulo(intidarticulo) { this idarticulo = idarticulo; ) public int getlddetalle() { relum iddetalle; } public void setiddetalle(intiddetalle) { this.iddetalle = iddetalle; public int getldpedido() { retumn idpedido; ) Public void setldpedido(intidpedido) { this idpedido = idpedido public double getPrecio() { return precio; ) public void setPrecio(double precio) { this. precio = precio: public double getSubtotal(){ retum subtotal; ) Public void setSubtotal(double subtotal) { this. subtotal = subtotal; } Yifin de ta clase detalle Pagina 6 de 18 UNIVERSIDAD NACIONAL TECNOLOGICA DE LIMA SUR ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS public class Empleado { private int idempleado; private String nombre private String patermo: private String materno; private String cargo; IM public String getCargot) { return cargo } Public void setCargo(String cargo) { this.cargo = cargo: } public int getldempleadot) { return idempleado; } public void setidempleado(int idempleado) { this.idempleado = idempleado; } public String getMaterno() { return materno } public void setMaterno(String materno) { this.materno = mateo; } public String getNombre() return nombre; ) Public void setNombre(String nombre) { this. nombre = nombre; ) public Sting getPaterno() { retum paterno; ) public void setPaterno(String pater) { this.paterno = patemo; ) Jifin de la clase empleado Pagina 7 de 18 UNIVERSIDAD NACIONAL TECNOLOGICA DE LIMA SUR, ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS public class PedidoEncabezado { ‘ipropiedades private int idpedido; private int idempleado; private String fecha; private int idcliente; private double total; Jimetodos get y set public String getFecha() { return fecha; } Public void setFecha(String fecha) { this fecha = fecha; } public int getidcliente(){ return idcliente; ) Public void setldctionte(int idcliente) { } public int getldempleadot) { return idempleado; public void setldempleado(int idempleado) { this.idempleado = idempleado; t public int getldpedido() { retum idpedido; } Public void setldpedido(intidpedido) { this idpedide = idpedido; ) public double getTotal() { return total; ) Public void setTotal(double total) { this total = total; } Jilin de la clase pedidoencabezado + Enel paquete pe.com.empresa.dao creams las siguientes clases: 8 panes a5 eae DacEmpieado.java ase Some SE RaRRB Pagina 8 de 18 UNIVERSIDAD NACIONAL TECNOLOGICA DE LIMA SUR ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS public class DaoArticulo { public static ArrayList listar(String nombre, Connection cn) throws SQLException { ArrayList lista = new ArrayList(); String sql = "select*trom articulo where nombre like 7; PreparedStatement ps = cn prepareStatement(sql); ps-setString(1, nombre + 6}; ResultSet rs = ps executeQuery(); Articulo art; while (s.next() { art = new Articulo(): art setidarticulo(s.getint(t)); art setNombre(rs.getString(2)); art setDescripcion(rs.getString(3)); art setPrecio(rs.getDouble(4)); art setidcategoria(rs.getint(6)); lista.adg(art); } rs.close(); ps.close(); cn.close(); relum lista; } Yiifin de la mclase DaoArticulo Public class DaoCliente { Public static ArrayList obtenerClintePorApelidos|String apelidos, Connection cn) throws SQLException { iMista es un objeto de tipo ArrayList que va a manipular un arregio de objetos de tipo Cliente. ArrayList lista = new ArrayList(); ‘Jsentecia sal para consultar los clintes String sql = “select” from cliente where apelidos like ‘variable tipo Cliente Cliente cit = nul; ifpresparedStatement para ejecutar sentencia sql PreparedStatement ps = cn.prepareStatement(sq); Ifasignar valor al parametro ? ps.setString(1, apellidos + '%); ‘iejecutar sentencia sq ResultSet rs = ps.executeQuery(); ‘Meer resultset while (rs.next() { ‘iobjet tipo Giiente para encapsular los datos que se lee del resultset cli = new Cliente(); liencapsular datos en e! objeto cli i setldclionte(rs.getint(1)) cl setApellidosirs.getString(2)); cl setNombresirs.getString(3)): cil setEmail(rs.getString(4)): cl. setidpais(rs.getint(5)); Jiagrear objeto al arrelo lista. add(cl); Hicerrar objetos rs.close();, ps.close(); Pagina 9 de 18 UNIVERSIDAD NACIONAL TECNOLOGICA DE LIMA SUR, ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS enclose(); return lista; } de Public static ArrayList obtenerClientePorCodigo(int cod, Connection cn) throws SQLException { ‘Mista es un objeto de tipo ArrayList que va a manipular un arreglo de objetos de tipo Cliente ArrayListCliente> lista = new ArrayList(); ‘sentecia sal para consultar los clintes por pais String sql = “select* from cliente where idcliente~ Cliente cli = ull ‘ipresparedStatement para ejecutar sentencia sql PreparedStatement ps = cn.prepareStatement(sq) asignar valor al parametro ? ps.setint(1, cod); liejecutar sentencia sql_asignar resultados en resultset ResultSet rs = ps executeQuery(); illeer resultset if (rsinext) ( ‘objeto tipo Cliente para encapsular los datos que se lee del resultset cli = new Cliente(); Hlencapsular datos en el objeto cli cl setldcliente(rs.getint(1)); cl. setApelidos(rs.getString(2)); cl setNombres(s.getString(3)); cl setEmaills.getSting(4)); l.setidpais(rs.getint(5)); HVagrear objeto al arrelo lista add(ci); } ‘icerrar objetos rs.close(); ps.ciose(); enciose(); retum lista; ) Yifin de la clase daoCliente Public class DaoDetalle { Public static void registrar(Detalle d, Connection cn) throws SQLException { ‘isentencia sql para insertar pedido String sql = “INSERT INTO Pedido_detalle(idpecidoidarticulo precio cantidad subtotal)values(?,?,?.?,2)" jase PreparedStatement para ejecutar sentencia sql con su metodo executeUpdate) PreparedStatement ps = cn.prepareStatement\sq)); ‘asignar valores a los parametros ? s-setint(1, d.getldpedido(); s.setint(2, d.getldarticulo()); s.setDouble(3, d.getPrecio() ps.setini(4, d.getCantidad))): s.setDouble(5, d.getSubtotal()); liejecutar instruccion sql Ps.executeUpdate(); i} Vitin de la clase DaoDetalle Pagina 10 de 18 UNIVERSIDAD NACIONAL TECNOLOGICA DE LIMA SUR ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS Public class DaoEmpleado { public static ArayList listar(Connection cn) throws SQLException { ‘ArayList lista = new ArrayListcEmpleado>() String sql = "select"from ernpleado"; PreparedStatement ps = cn prepareStatement(sq); ResultSet rs = ps.executeQuery() Empleado emp: while (r.neat() { emp = new Empleado(); ‘emp setldempleado(rs.getint(t); emp setNombre(s.getString(2) lista.ada(emo); rs.close(); ps.close(); en.close(); relum lista; Public static int obtenerCodEmpleado(Connection cn, String nom) throws SQLException { ‘String sq| = "select idempleado, nombre from empleado where nombre=?"; intcod = 0; PreparedStatement ps = cn.propareStatement(sql); ps.setString(1, nom); ResuitSet rs = ps.executeQuery(); if (rsnextQ) ( cod = s.getint(t}; rs.close(); ps.close(); en.close(): return cod; ) Witin de la clase DaoEmpleado Public class DaoPedido { Public static void registrar(PedidoEncabezado ped, Connection en) throws SQLException { Jisentencia sql para insertar pedido String sql = “INSERT INTO pedido_encabezado(techa,totalidempleado idcliente)values(?,?.?.7 Jidlase PreparedStatement para ejecuitar sentencia sqi con su metodo executeUpdate() PreparedStatement ps = cn prepareStatement(sq)); Wasignar valores a los parametros ? ps.setDate(1, Fecha deStringaDate(ped .getFecha\))); s.setDouble(2, ped getTotal(): ps.setint(S, ped.getidempleado()); Pssetint(4, ped.getldcliente(); Jejecutar instruccion sql ps.executeUpdate() Pagina 11 de 18 UNIVERSIDAD NACIONAL TECNOLOGICA DE LIMA SUR ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS Public static int obteneridPedido(Connection cn) throws SQLException { int idped String sql = “select max(idpedido) from pedide_encabezado"; ‘ilase PreparedStatement para ejecutar sentencia sql con su metodo executeUpdate() PreparedStatemont ps = on.prepareStatement(sq); ResultSet rs = ps.executeQuery(); if (rs.next0) { idped = rs.getint(t} + 1; liejecutar instruccion sql s.executeQuery(); licerrar objetos ps.close(); relum idped; } Jilin de la clase DaoPedido ‘+ Enel paquete pe.com.empresa.facade creamos la clase Pedido: Pecido.java public class Pedido ( // registra la cabocera y el dtale de pedido usando transacciones public boolean registrarPedido(PedidoEncabezado cab, ArrayList detalles) ( Connection on = Conexion abr); para recuperar ultimo codigo del pecido boolean fag = false: ty iii la transaccion cn setAutoCommit alse): /linserta un rgisto en la tabla pedido DaoPedido.registrar(cab, cn); ‘irecorrer el arregio de detales @ insertar cada uno de los detales for (Detaled: deta) { DaoDetalle.registrar(d, cn); i! Silos inserts fueron exitosos, entones hacer un commit ‘ca.commit(); flag = rue; J catch (Exception ex) { ty il en caso de tener ERRORES hacer un rollback cn.rollback(); J eatch (SQLException ext) { ‘System.out printin("Pedido no registrado:” + ext): Hinally ty en.setAutoCommit(rue); cen.close(); } catch (SQLException ext) { ex! printStackTrace(); , ) return flag; , Pagina 12 de 18 UNIVERSIDAD NACIONAL TECNOLOGICA DE LIMA SUR, ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS ‘imétodo recive como parametro carécter inicial de articulo para devolver lista de articulos Public static ArrayList listarArticulo(String inicialart){ Connection cn=Conexion abrir(); ArrayList lista=null; ty{ lista = DaoArtculo lstar(nicialart, en); }eatch (SQLException ex) { System.outprintin("Error_en la lista articulos:"+ex); ? return lista; 1 public static ArrayListbucarClienteApellides(String ap){ Connection cn=Conexion abrir); ArrayList lsta=null; tty { lista = DaoCliente.obtenerCiintePorApelidos(ap, cn): }eatch (SQLException ex) { ‘System out prntin("Error en la Isita de clientes:"sex); return lista; } H public static ArrayListbucarClientecodigo(int cod){ Connection cn=Conexion abrir); ArrayListeGiiente> lista=null ty ( lista = DaoCiiente,obtenerClintePorCodigo(cod, cn}; } catch (SQLException ex) { ‘System. out printin( ‘Error en la Ista de clentes:"sex); } return lista; Public static ArrayListlistarEmpleado({ Connection cn=Conexion.absi(); ArrayList lista=null; try lista = Dao mpleadistar(en); } catch (SQLException ex) { System. out printin("Error en la lista de empleado."+ex); return lista; } i public static int obtenerCodigoEmpleadoNomibre(String nombre}{ Connection cn=Conexion abrir(); int cod=0; try ‘cod= Dac mpleado obtenerCodEmpleada(en, nombre); }eatch (SQLException ex) { ‘System out.printin(“Error."+ex);, } return cod; } public static int obtenerldPedido(){ Connection cn=Conexion.abri(); int cod=0;, Pagina 13 de 18 UNIVERSIDAD NACIONAL TECNOLOGICA DE LIMA SUR. ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS try { Cod= DaoPedido.obtenerldPedido(en); } catch (SQLException ex) { } return cod; Jytn de a clase pedo ‘+ Enel paquete pe.com.empresa.gul Wombees usr ot Par Pagina 14 de 18 UNIVERSIDAD NACIONAL TECNOLOGICA DE LIMA SUR ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS ‘+ Métodos en la interfaz grafica: Public class frmregpedido extends javax.swing.JFrame { limodelo de tabla DefaultTableModel tbimodelo; Me Jimetodo para istar los aticulos en el List ArrayListcArticulo> articulos : public void articulosEnLaLista(){ atioulos «Pedido istarAriculo(btinicial getText); DefaultListModel modelo=new DefaultListModel() forArticulo xarticulos}( modelo.addE'ement(x getNombre(): } Istarticulos.setModel(modelo}; } i ~ /imetodo para asignar articuo en los cuadros de texto public void asignarArticulosEnText({ articulos =Pedido.listarArticulo(String.valueOf'starticulos.getSelectedValue())); for(Articulo x:articulos){ ‘otidarticulo.setText(String.valueOf{x getldarticuio())); txtnomarticulo.setText(x.getNombre()); ‘wtdesarticulo.setText(x getDescripcion()); Ixtprecio.setText(String.valueOt(x getPrecio())); } } i = ‘Imetodo para lstar empleado public void listaEmpleado(){ ‘ArrayList empleados=Pedido listarEmpleadol);, for(Empleado x:empleados){ ‘cboempleado.additem(x.getNombre(); estructura de la tabla Public void Tabla(){ setTitle(*Mantenmiento de una tabla’) liestablcer columnas a la base de datos ‘String {JencabezadoColumnas={"Io","Nombre","Cantidac Jlestableciendo el modelo de tabla tbimodelo=new DefaultTableModel(null,encabezadoColumnas); {vasignar modelo a la tabla thipedidos. setModel(tbimodelo); ee Public void fecha(){ Date ahora = new Date(); ‘SimpleDateFormat formateador = new SimpleDateFormat("yyyy-MM-ad"); ‘utlecha.setText(formateador.format(ahora)) : Pagina 15 de 18 UNIVERSIDAD NACIONAL TECNOLOGICA DE LIMA SUR ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS fancho de las columnas de la tabla Public vold anchoColumnasTabla(){ tlpedidos.getColumnModel\) getColumn(4).setPreterredWidth(100): tlpedidos.getColumnModell).getColumn(3).setPreferredWidth( 100) tbipedidos.getColumnModel\).getColumn(2).setPreferredWidth (100): tlpedidos.getColumnModel\).getColumn( ).setPreferredWidth(400); tbipedidos.getColumnModel\).getColumn(0}.setPreferredWidth(100); i agregar articulos pedidos a la tabla Public void agregarittemaTabla()( ii(tidarticulo.getText() im().length()!=0 && txtcantidad getText()trimi).length()!=0){ int cant=Integer parselnt(txtcantidad getText); double pr=Double.parseDouble(txtprecio.getText(); double subtotal=cant’pr; tbimodelo.addRow(new Object!{txtidarticulo.getText() txtnomarticulo getText\) xtcantidad getText(),xtprecio.getText() subtotal); ‘total de pedido totalPedido(); Jelse mensaje("Ingrese datos de articul..."); } z Notal de los de peidos de articulos Public void totalPedido({ double to {for(int i=0;i=0}{ tbimodelo.removeRow(tbipedidos.getSelectedRow(); Jelse{ mensaje("Seleccione fila a quita..."); } } I ‘uscar cliente por apellides public void buscaClienteApelidos(){ ArrayList clientes=Pedido bucarClienteApeliidos(xtapecliente.getText()); for(Cliente x:clientes){ ‘utidoliente.setText(String valueOt(x.getldcliente(); ‘xtnomeliente.setText(x getNombres()) ; } } Pagina 16 de 18 UNIVERSIDAD NACIONAL TECNOLOGICA DE LIMA SUR, ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS ‘buscar cliente por codigo public void buscaClienteCodigo(){ if(otidcliente.getText() rim) Jength()!=0){ ArrayList clientes=Pedido. bucarClientecodigo(Integer.parselnt(txtidcliente.getText())); for(Ciiente x:clientes){ txtnomcliente.setText(x.getNombres()) ; ‘tapeciionte.setText(x.getApeliidos()); ) } te Iiregistrar pedido Public void registrarPedido({ Jivariables Padido objped: PedidoEncabezado cab=null; isi la jatable tiene registros encapsulamos datos tanto lipara encabezado de pedido y detalles de pedido if(blpedidos getRowCount()>0){ liencapsulando datos cab=new PedidoEncabezado(); String nom=String.valueO}(cboempleado.getSelectedltem()); cab setldempleado(Pedido.obtenerCacigoEmpleadoNombre(nom)); cab setFechaitxtfecha getText()) cab setldciiente(Integer-parselnt(bxtidcliente.getTex()); cab setTotal(Double parseDouble(tuttotal.getTex\()); Jinumero de filas del jtable int nfilas=tbipedidos.getRowCount(); Hobjeto arraylist para agregar conjunto de articulso que se ‘linsertaran en la tabla detalle ArrayList listasnew ArrayList() ; Detale det for(int i=Oricntfilas;ie+){ det=new Detalle() det. setidpedido(Integer.parselnt(txtnumeropedido.getText()); det.setldarticulo{integer-parsent(String.valueO{tbipedidos.getValueA\(.0))): det.setCantidad|Integer.parselnt( String valueOiitblpedidos.getValueAt(,2))) det.setPrecio( Double. parseDouble(String valueO'tblpedidos.getValueAt(, 3): det.setSubtotal(Double parseDouble (String valueOf{tbipedidos getValueAl\ 4))); agregar ala sta lista.ad(det); Hfobjeto pedido objped=new Pedido(); ‘entregamos como parametros los objetos para liel encabezado del pedido que se insertara una sola vez en la tabla pedido ‘1 la lista se insertara en funcion a la cantidad de registros que haya Hien la tabla boolean faobjped registrarPedido(cab, ita); if ‘mensaje(‘Pedido registrado...!") , Jelse{ ensaje("Ingrese datos a la tabla”); Pagina 17 de 18 UNIVERSIDAD NACIONAL TECNOLOGICA DE LIMA SUR, ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS Nieonstructor del jframe public frmregpedido() { initComponents(); setTitle("Registrar Pedido"); setLocationRelativeTo (nul) Inabla de pedidos Tabla(); lancho columnas ancnoColumnasTabla(); ‘lista de empleaos en la lista desplegable listaEmpleado(); Mecha, fecha(); Jldbtener numero de pedido, es el ditimo numero de la tabla pedido ‘wtnumeropedido.setText(String.valueOr(Pecido.obtenerldPedido()); } thos Eventos private void txtinicialkeyPressed{java.awt.event.KeyEvent evt){ articulosEnLaLista(); ) private void IstarticulosValueChanged{javax swing. event ListSelection€ vent evt) { asignarAnticuiosenText(); ) private void binagregaritemActionPerformed(java.awt.event ActionEvent ov) { agregarlttemaTabla(); private void binquitaritemActionPerformed(java.awt.event ActionEvent evt) ( borrarFilaTablaPedidos(); ) private void txtapeciionteKeyPressed{java.awt.event.KeyEvent evt) { buscaClienteApelidos(); ) private void txtidclienteKeyPressed{java.awt.event.KeyEvent evt)( buscaClienteCodigo(); } private void binregistrarpedidoActionPerformed{java.awt event. ActionEvent ev}) { tegistrarPedido(); } Pagina 18 de 18

También podría gustarte