Recent Posts

Pages: [1] 2 3 ... 10
1
C/C++ linux / ESTRUCTURAS DERIVADAS (Punteros, listas, colas y arboles)
« Last post by hugotecnologia2 on Mayo 03, 2019, 09:51:56 pm »
Continuando con las estructuras que se utilizan en los lenguajes de programación, en esta ocasión conoceremos a los punteros, las listas, las colas y los arboles, basadas en las estructuras básicas y que se pueden adaptar fácilmente a las condiciones del programa en las que se utilizan.

Enlace del video en youtube: https://youtu.be/pLyjZ92VvIg
2
Ofertas de empleo / Programador Junior C++ Bilbao
« Last post by Highlander Recruitment on Mayo 02, 2019, 07:22:46 pm »
Importante empresa del sector Ocio precisa incorporar en su departamento técnico un/a programador/a C++ para incorporarse al equipo de desarrollos internos en la sede de Bilbao.

Si eres un perfil junior, y aún tienes poca experiencia laboral, esta es una muy buena oportunidad para incorporarte a jornada completa en un equipo de trabajo multidisciplinar donde podrás aprender y desarrollarte en la programación y en el trabajo en equipo.

Tu función será la programación de software para la gestión de máquinas recreativas y de videojuegos, y la gestión de los protocolos de comunicación con las máquinas. Dentro del equipo de trabajo podrás realizar diferentes tareas de programación más o menos complejas en función de tus conocimientos.


Se valorará positivamente:

- Imprescindible conocimiento y manejo de la Programación Orientada a Objetos y patrones de desarrollo.

- Programación en C++

 
Te ofrecemos

- Incorporación a equipo de trabajo multidisciplinar y dinámico en constante evolución

- Contrato laboral estable

- Salario acorde al puesto de trabajo

Interesados, por favor contactar a través de MP
3
Java JSE / Re: No puedo eliminar el último registro creado en BBDD
« Last post by Jaia on Marzo 16, 2019, 01:01:13 am »
Hola:

La base de datos ahora mismo es MariaDB, pero pienso cambiarla por SQLite. Es posible que un futuro incluya otras bases de datos.

En cuanto a la cuestión en sí, tienes toda la razón. Te cuento:

La base de datos tiene un ID autoincremental, y al ingresar el producto meto todos los campos necesarios menos el ID. Esto funciona, pero claro, hasta que no hago una lectura completa de todo los registros físicos en la base de datos, estoy trabajando con productos en memoria (que no tienen ID). Es por esto que al intentar eliminar el registro sin cerrar la aplicación la consulta me retornaba 0.

Fallos de novato supongo.

Muchas gracias.
4
Java JSE / Re: No puedo eliminar el último registro creado en BBDD
« Last post by chuidiang on Marzo 15, 2019, 08:13:19 pm »
Hola:
No sé qué base de datos estás usando, pero si es una de las de toda la vida (postgres, mysql, oracle, mariadb ... ) casi al 100% que el problema es tú código.

Mira con debugger, en el método eliminar que el id del producto que quieres borrar está bien relleno y ese id está en la base de datos.

Un saludo.
5
Java JSE / No puedo eliminar el último registro creado en BBDD
« Last post by Jaia on Marzo 15, 2019, 08:41:34 am »
Hola:

Tengo un problema con la base de datos, que después de darle vueltas creo que el error no es de mi código sino de la base de datos, pero no estoy seguro.

El caso es que, después de agregar un registro desde la aplicación, ningún problema ahí, cuando quiero eliminar ese mismo registro no lo hace. Connection.executeUpdate() retorna 0. Si voy a otro registro de la tabla, me lo borra sin problemas.

Si cierro y abro la aplicación para borrar ese último registro , entonces sí me deja hacerlo. No veo el fallo.

Code: [Select]
    private void eliminar() {
        Producto p = tabla.getSelectionModel().getSelectedItem();
        if (p != null) {
            Cargar.cargarEliminarProducto(p);
            EProducto cont = (EProducto) Cargar.getControladorActual();
            try {
                if (cont.getRespuestausuario() == 1) {
                    VentaIDs v = Ventas.getVentasPorIdProducto(p.getId().get());
                    if (v != null) {
                        alertaAsociada(ParseDates.getFecha(v.getFventa().get()));
                    } else {
                        if (Productos.eliminarProducto(p)) { // <- Aquí está la chicha
//                        Productos.eliminarProducto(p);
                        alertaOk();
                        listaProductos.remove(p);
                        rellenarTabla();
                        tabla.getSelectionModel().clearSelection();
                        } else {
                            throw new SQLException();
                        }
                    }
                }
            } catch (SQLException ex) {
                alertaSQL();
                System.out.println("EX: " + ex.getCause() + " -> " + ex.getMessage());
                Logger.getLogger(PProductos.class.getName()).log(Level.SEVERE, null, ex);
            } catch (ClassNotFoundException ex) {
                // CREAR UN LOG DE INCIDENCIAS
                alertaGrave();
                Logger.getLogger(PProductos.class.getName()).log(Level.SEVERE, null, ex);
            }
        } else {
            alertaSeleccion();
        }
    }

Este método se acciona tras pulsar el botón eliminar. Lanza la vista fx, carga el controlador, se pasan los parámetros sin problemas de un sitio a otro ... todo bien.
El if llama a un método estático que se conecta con la base de datos, y debe retornar un boolean tras ejecutar las sentencias, que son estas:

Code: [Select]
    public static boolean eliminarProducto(Producto p) throws SQLException, ClassNotFoundException {
        if(p != null) {
            System.out.println("Tabla: " + TABLA);
            String sql = "delete from " + TABLA
                    + " where " + ConfigDB.getCampos(TABLA).get(0) + " = ?";
            System.out.println(sql);
            PreparedStatement pstm = ConnDB.getConn().prepareStatement(sql);
            pstm.setInt(1, p.getId().get());
            int res = pstm.executeUpdate();
            System.out.println("DEL PRODUCTO: " + res);
            return res == 1;
        }
        return false;
    }

Las tablas están bien, las consultas son correctas. Pienso que podría ser algo de la base de datos y no sé si puedo hacer algo.

Alguna idea? Gracias.
6

Hola, buen día.

Tengo una clase padre Aparato y 2 clases hijos: ventilador y Aire, el problema surge cuando agrego algún aparato a la habitación y no refresca el JTablet, no se que debo estar haciendo mal???

Mostrar de esta forma los datos por cada habitacion:
idAparato aparato
1                Luz
2                Ventilador
3                Aire

Adjunto el código de ambas clases.

INICIO CLASE APARATO
@Entity
@Inheritance
@DiscriminatorColumn(name = "descripcion", discriminatorType = STRING)
@DiscriminatorValue("Luz")
@Table(name = "aparato")

public class Aparato  implements Serializable{
  @Id
  @SequenceGenerator(name="sec_idAparato", initialValue=1, allocationSize=1)
  @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="sec_idAparato")
  @Column(name = "idAparato") 
  private Integer idAparato;

  private char tipoSalida='A';
 
  //@Column(name = "descripcion", nullable = true, unique = false)
  private String descripcion;

  @ManyToOne
  @JoinColumn(name = "nroHabitacion")
  private Habitacion unaHabitacion;

    public Aparato(Habitacion unaHabitacion) {
        this.idAparato = idAparato;
        this.unaHabitacion = unaHabitacion;
    }
  public Aparato () { };
 
    public Integer getIdAparato() {
        return idAparato;
    }
    public void setIdAparato(Integer idAparato) {
        this.idAparato = idAparato;
    }
    public char getTipoSalida() {
        return tipoSalida;
    }

    public void setTipoSalida(char tipoSalida) {
        this.tipoSalida = tipoSalida;
    }
    public Habitacion getUnaHabitacion() {
        return unaHabitacion;
    }
    public void setUnaHabitacion(Habitacion unaHabitacion) {
        this.unaHabitacion = unaHabitacion;
    }

    public String getDescripcion() {
        return descripcion;
    }
    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }
    @Override
    public String toString() {
        return idAparato + "-" + descripcion;
    }
   
    public boolean isIdAparato(int nro){
         boolean retorno = false;
         if( this.getIdAparato() == nro){
             retorno = true;   
        }
        return retorno;
    }
}
----FIN CLASE APARATO

---INICIO CLASE VENTILADOR
@Entity
@DiscriminatorValue("Ventilador")
public class Ventilador extends Aparato implements Serializable{

  @Column(name = "velocidad", nullable = true, unique = false)
  private Integer velocidad=0;

   public Ventilador (Habitacion unaHabitacion) {
      super(unaHabitacion);
    };
   
  public Ventilador (Integer velocidad, Habitacion unaHabitacion) {
      super(unaHabitacion);
      this.velocidad = velocidad;
 };

  public Ventilador () { };
 
      public Integer getVelocidad() {
        return velocidad;
    }
    public void setVelocidad(Integer velocidad) {
        this.velocidad = velocidad;
    }
    @Override
    public boolean isIdAparato(int nro) {
        return super.isIdAparato(nro);
    }
    @Override
    public void setUnaHabitacion(Habitacion unaHabitacion) {
        super.setUnaHabitacion(unaHabitacion);
    }
    @Override
    public Habitacion getUnaHabitacion() {
        return super.getUnaHabitacion();
    }
    @Override
    public void setTipoSalida(char tipoSalida) {
        super.setTipoSalida(tipoSalida);
    }
    @Override
    public char getTipoSalida() {
        return super.getTipoSalida();
    }
    @Override
    public void setIdAparato(Integer idAparato) {
        super.setIdAparato(idAparato);
    }
    @Override
    public Integer getIdAparato() {
        return super.getIdAparato();
    }
    @Override
    public void setDescripcion(String descripcion) {
        super.setDescripcion(descripcion);
    }
    @Override
    public String getDescripcion() {
        return super.getDescripcion();
    }
    @Override
    public String toString() {
        return super.toString() + velocidad;
    }
 
}
---------FIN CLASE VENTILADOR

----------INICIO CLASE Aire
@Entity
@DiscriminatorValue("Aire")
public class Aire extends Aparato implements Serializable{

  @Column(name = "temperatura", nullable = true, unique = false)
  private Integer temperatura=0;
   
  @Column(name = "ciclo", nullable = true, unique = false)
  private char ciclo='F';
   public Aire () { };

   public Aire(Habitacion unaHabitacion) {
      super(unaHabitacion);
   }
    @Override
    public boolean isIdAparato(int nro) {
        return super.isIdAparato(nro);
    }
    @Override
    public void setUnaHabitacion(Habitacion unaHabitacion) {
        super.setUnaHabitacion(unaHabitacion);
    }
    @Override
    public Habitacion getUnaHabitacion() {
        return super.getUnaHabitacion();
    }
    @Override
    public void setTipoSalida(char tipoSalida) {
        super.setTipoSalida(tipoSalida);
    }
    @Override
    public char getTipoSalida() {
        return super.getTipoSalida();
    }
    @Override
    public void setIdAparato(Integer idAparato) {
        super.setIdAparato(idAparato);
    }
    @Override
    public Integer getIdAparato() {
        return super.getIdAparato();
    }
    @Override
    public void setDescripcion(String descripcion) {
        super.setDescripcion(descripcion);
    }
    @Override
    public String getDescripcion() {
        return super.getDescripcion();
    }
    public Integer getTemperatura () {
        return temperatura;
    }
   public void setTemperatura(Integer temperatura) {
        this.temperatura = temperatura;
    }
    public char getCiclo() {
        return ciclo;
    }
    public void setCiclo(char ciclo) {
        this.ciclo = ciclo;
    }
    @Override
    public String toString() {
        return super.toString()+ciclo+temperatura;
    }
}

-------FIN AIRE ACONDICIOANDO

-----------CLASE HABITACION
@Entity
@Table(name = "habitacion")
public class Habitacion  implements Serializable{

  @Id
  @SequenceGenerator(name="sec_nroHabitacion", initialValue=1, allocationSize=1)
  @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="sec_nroHabitacion")
  @Column(name = "nroHabitacion")
  private Integer nroHabitacion;
 
  @Column(name = "nombreHabitacion", nullable = false, unique = false)
  private String nombreHabitacion;
 
 
  @ManyToOne
  @JoinColumn(name = "nroPiso")
  private Piso unPiso;
 
  @OneToMany(mappedBy = "unaHabitacion")
  private List<Aparato> aparatos;
   
  @OneToMany(mappedBy = "unaHabitacion")
  private List<Ventilador> ventiladores;
 
  @OneToMany(mappedBy = "unaHabitacion")
  private List<Aire> aires;

 
  public Habitacion (String nombreHabitacion, Piso unPiso)
  {
      this.nombreHabitacion = nombreHabitacion;
      this.unPiso = unPiso;
     
      this.aparatos = new ArrayList<Aparato>();
      this.ventiladores = new ArrayList<Ventilador>();
      this.aires = new ArrayList<Aire>();
  }

  public Habitacion () { };
 
  public Integer getNroHabitacion()
  {
        return nroHabitacion;
  }

    public void setNroHabitacion(Integer nroHabitacion) {
        this.nroHabitacion = nroHabitacion;
    }

    public String getNombreHabitacion() {
        return nombreHabitacion;
    }

    public void setNombreHabitacion(String nombreHabitacion) {
        this.nombreHabitacion = nombreHabitacion;
    }

    public Piso getUnPiso() {
        return unPiso;
    }

    public void setUnPiso(Piso unPiso) {
        this.unPiso = unPiso;
    }

    @Override
    public String toString() {
        return nombreHabitacion;
    }

    public List<Aparato> getAparatos() {
        return aparatos;
    }

    public void setAparatos(List<Aparato> aparatos) {
        this.aparatos = aparatos;
    }

    public List<Ventilador> getVentiladores() {
        return ventiladores;
    }

    public void setVentiladores(List<Ventilador> ventiladores) {
        this.ventiladores = ventiladores;
    }

    public List<Aire> getAires() {
        return aires;
    }

    public void setAires(List<Aire> aires) {
        this.aires = aires;
    }

  public void agregarAparato()throws ErrorException
  {
        Aparato a = new Aparato(this);
        //sino tengo agrego una nueva         
        this.getAparatos().add(a);
        casa.getPersistencia().insertar(a);
  }

  public void agregarVentilador()throws ErrorException
  {
        Ventilador v = new Ventilador(this);
        this.getVentiladores().add(v);
        casa.getPersistencia().insertar(v);

  }

  public void agregarAire()throws ErrorException
  {
        Aire aa = new Aire(this);
        this.getAires().add(aa);
        casa.getPersistencia().insertar(aa);
  }
}
------------------------------------------------------------------------

--------------------------------BOTON GUARDAR
try{
                Habitacion unaHabitacion;
                if (ComboBoxHabitaciones.getItemCount() > 0) {
                    unaHabitacion = (Habitacion) ComboBoxHabitaciones.getSelectedItem();     
                   
                    if(RBLuz.isSelected() == true) {
                       
                        unaHabitacion.agregarAparato();
                    }
                    if(RBVentilador.isSelected() == true) {
                       
                        unaHabitacion.agregarVentilador();
                    }
                    if(RBAire.isSelected() == true) {
                       
                        unaHabitacion.agregarAire();
                    }
                    JOptionPane.showMessageDialog(rootPane, "Se a guardado de manera exitosa.");
                    casa.getPersistencia().refrescar(casa);
                    mostrarAparatos((Habitacion)ComboBoxHabitaciones.getSelectedItem());
                }else{
                    JOptionPane.showMessageDialog(this, "Debe seleccionar una Habitación.");
                    this.ComboBoxHabitaciones.requestFocus();
                }
               
            } catch (Exception e) {
                JOptionPane.showMessageDialog(rootPane, "Se dectecto un problema.!!!!!!!!!!");
            }
--------------------------------------------------------
MOSTRAR APaRATOS--------------------------------------------------

private void mostrarAparatos(Habitacion unaHabitacion){
        this.auxUnaHabitacion=unaHabitacion;
        try {
            MyTableModel tabla = new MyTableModel();
            tabla.isCellEditable(0, 0);
            tabla.setColumnCount(0);
            tabla.addColumn("ID Aparato");
            tabla.addColumn("Aparato");

        this.auxUnaHabitacion=unaHabitacion;
        Iterator <Aparato> listAparato = this.auxUnaHabitacion.getAparatos().iterator();
        Aparato inte;
       
        while(listAparato.hasNext()){
            String nombre="";
            inte = listAparato.next();
           
            if(inte instanceof Ventilador){
                Ventilador v =(Ventilador) inte;
                nombre= v.getDescripcion();
            }else if(inte instanceof Aire)
            {
                Aire aa =(Aire) inte;
                nombre=aa.getDescripcion();
            }
///CUANDO GURADO EL PRIMER APRATO LUZ ME DA ERROR EN ESTA LINEA
            if(inte.getDescripcion().equals("Luz")){
                nombre=inte.getDescripcion();
            }
            tabla.addRow(new Object[]{
               inte.getIdAparato(),nombre
            });
         }

         this.tableAparatos.setModel(tabla);
         tableAparatos.setLayout(null);
           
        } catch (SecurityException e) {
        } catch (HeadlessException e) {
        }             
    }
7
Java JSE / Re: Proeblema en transferencia de archivos
« Last post by Jaia on Enero 15, 2019, 04:31:08 pm »
Este tipo de explicaciones son las que deberían venir en los libros.

Muchísimas gracias.
8
Java JSE / Re: Proeblema en transferencia de archivos
« Last post by chuidiang on Enero 15, 2019, 04:21:55 pm »
Hola:

Cuando lees un array (   n = entrada.read(b) ) no tienes garantía de leer TODOS los bytes del array, sobre todo en socket que los bytes circulan por red y  pueden no haber llegado todavía todos los bytes necesarios para rellenar el array al completo. De hecho, n te está diciendo cuántos bytes has leído y debes usar ese valor de n para saber cuántos bytes hay en el array que han sido leidos.

Deberías hacer algo parecido a esto

Code: [Select]
byte[] b = new byte[8192];
                while ((n = entrada.read(b)) != -1) {
                    salida.write(b, 0, n);   // bytes, empezando en el 0, hasta n
                }

También podias dejarlo como lo tenias, bytes de uno en uno, pero lo que no puedes hacer es usar entrada.ready() para decidir que has llegado al final del socket. Si el byte no ha llegado cuando preguntas, ready() te dira que no hay byte, pero no porque se hayan terminado de enviar, sino porque solo porque no ha llegado todavía.

Saludos.
9
Java JSE / Re: Proeblema en transferencia de archivos
« Last post by Jaia on Enero 14, 2019, 08:40:37 pm »
Bueno he realizado algunos cambios pero realmente no sé lo que está pasando.

Tenías razón sobre lo del buffer y conseguí resolver el problema en parte. Ahora me escribe todos los bytes, por lo menos en lo que a la cantidad se refiere, pero escribe lo que quiere ya que es ilegible.

Abrir el archivo directamente con alguna aplicación es imposible, no lo reconoce, y al abrir el archivo con un editor hexadecimal, y comparar el original y el transferido, pues veo que no se parecen en nada.

En el servidor tengo esto:

Code: [Select]
@Override
    public void run() {
        try {
            entradaStr = new BufferedReader(new InputStreamReader(this.so.getInputStream()));
            entrada = new DataInputStream(new BufferedInputStream(this.so.getInputStream()));
            String linea = entradaStr.readLine();
            System.out.println("Linea: " + linea);
            String[] str = linea.split("&");
            System.out.println("str: " + Arrays.toString(str));
            for (String s : str) {
                System.out.println(s);
            }
            String comando = str[0];
            String nombre = str[1];
            Long tam = Long.valueOf(str[2].trim());
            salida = new DataOutputStream(new FileOutputStream(new File(nombre)));
            byte[] b = new byte[8192];
            int n;
            while ((n = entrada.read(b)) != -1) {
                salida.write(b);
            }
            entradaStr.close();
            entrada.close();
            salida.flush();
            salida.close();
        } catch (IOException ioe) {
            ioe.printStackTrace();
            System.exit(0);
        }
        System.exit(0);
    }

Y en el cliente:
Code: [Select]
public static void main(String[] args) {
        JFileChooser selector = new JFileChooser();
        selector.setFileSelectionMode(JFileChooser.FILES_ONLY);
        selector.setMultiSelectionEnabled(false);
        int res = selector.showOpenDialog(selector);
        if (res == JFileChooser.APPROVE_OPTION) {
            File fila = selector.getSelectedFile();
            String nombre = fila.getName();
            String tam = String.valueOf(fila.length());
            String comando = "UP";
            String remoto = "127.0.0.1";
            String del = "&";
            int puerto = 57000;
            try {
                Socket so = new Socket(remoto, puerto);
                so.setSoLinger(true, 5);
                String linea = comando + del + nombre + del + tam + "\n";
                DataInputStream entrada = new DataInputStream(new FileInputStream(fila));
                DataOutputStream salida = new DataOutputStream(new BufferedOutputStream(so.getOutputStream()));
                salida.writeBytes(linea);
                int n;
                byte[] b = new byte[8192];
                while ((n = entrada.read(b)) != -1) {
                    salida.write(b);
                }
                entrada.close();
                salida.flush();
                salida.close();
            } catch (IOException ioe) {
                ioe.printStackTrace();
            }
           
        }
    }

He puesto un buffer como me indicabas pero ya digo que no comprendo como hacer esto de forma correcta.

No estoy obligado a utilizar esta fórmula ni mucho menos, tengo flexibilidad total, pero me llega al alma no comprender algo que en principio es sencillo, y que aparentemente sobre el papel es correcto.

No lo comprendo.
10
Java JSE / Re: Problema al comunicar JFrame con base de datos Access
« Last post by Jaia on Enero 14, 2019, 08:26:58 pm »
Me alegra poder haber sido de ayuda.

Un saludo.
Pages: [1] 2 3 ... 10
ey