Ver Mensaje Individual
  #2 (permalink)  
Antiguo 02/04/2013, 14:14
sebastopols
 
Fecha de Ingreso: marzo-2011
Mensajes: 342
Antigüedad: 13 años
Puntos: 97
Respuesta: Select para update o insert según el caso

Cita:
Lo que necesito es cuando inserto con la clase detalles de proveedores desde una factura los productos hacer el update si existe en la tabla productos de cantidad y precio unitario o en su defecto si ese producto no existe, directamente darlo de alta.
No se entiende demasiado, pero lo que interpreto es que querés hacer una transacción a nivel de persistencia, si existe dicho producto le haces update, sino es un alta.

Esto es un ejemplo para que solo mires a nivel genérico de qué va... una vez que entiendas la estructura te darás cuenta que no es difícil... primero da el alta, luego recupera el id que se generó para insertar filas con ese id pero en una nueva tabla... en resumen, se carga en una tabla el pedido y en otra las líneas del pedido, saludos

Código Java:
Ver original
  1. //Se agrega un pedido a la base para un cliente dado.
  2.     public void AgregarPedido(Pedido MiPedido) throws SQLException, Exception
  3.     {
  4.         Class.forName(driver).newInstance();
  5.         con = DriverManager.getConnection(conexion,usuario,contraseña);
  6.         st = con.createStatement();
  7.  
  8.         String insert1 = "Insert into pedidos(idpersona,fechapedido, estadopedido, disponible ) values ('"+MiPedido.getPersona().getIdpersona()+"','"+MiPedido.getFecha()+"','En cocina',1)";
  9.         String insert2;
  10.  
  11.         int iSalidaPed = 0;
  12.  
  13.         try {
  14.             con.setAutoCommit(false);
  15.             st = con.createStatement();
  16.             st.executeUpdate(insert1);
  17.             rs = st.executeQuery("Select LAST_INSERT_ID()");
  18.             if(rs.next())
  19.             {
  20.                 iSalidaPed = rs.getInt(1);
  21.             }
  22.             for(Object element: MiPedido.getLineaPedido())
  23.             {
  24.                 insert2 = "Insert into lineaspedidos (idpedido, cantidad, idplato) values ("+ iSalidaPed +"," + ((LineaPedido)element).getCantidad() + "," + ((LineaPedido)element).getPlato().getIdplato()+")";
  25.                 st.executeUpdate(insert2);
  26.             }
  27.             con.commit();
  28.             st.close();
  29.             con.close();  
  30.         }
  31.         catch (SQLException ex)
  32.         {
  33.            con.rollback();
  34.         }    
  35.     }