Error Can not convert 2/27/17 12:00 AM of type class java.util.Date to class java.sql.Date

1

I need Guidance, I have this form xhtml with primefaces and I want to store date and time from the calendar component to my MySql as I resolve the error:

 javax.el.ELException: /create.xhtml @44,91 value="#{data.kardex_create.fechaingreso}:
 Cannot convert 27/02/17 12:00 AM of type class java.util.Date to class java.sql.Date"

The code:

create.xhtml

<!-- 
< ?xml version='1.0' encoding='UTF-8' ?>
< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
< html xmlns="http://www.w3.org/1999/xhtml"
       xmlns:h="http://xmlns.jcp.org/jsf/html"
       xmlns:p="http://primefaces.org/ui"
       xmlns:f="http://java.sun.com/jsf/core">
     < h:head>
        < meta charset="utf-8"/>
        < link   href="css/bootstrap.min.css" rel="stylesheet"/>
        < script src="js/bootstrap.min.js"></script>
        < title>JSF Fecha y Hora</title>
    < /h:head>
    < h:body>
        < div class="container">
        < div class="row">
            < h3>JSF Fecha y hora</h3>
        < /div>
        < div class="row">
            < div class="tabbable">
                < ul class="nav nav-tabs">
                    < li class="active"><a href="" data-toggle="tab">JSF</a>< /li>                        
                < /ul>                    
            < /div>
        </div>    
        < div class="row">
            < h4>Agregar Fecha y Hora< /h4>
        < /div>
        < div class="row">
            < h:form class="form-horizontal">
            < div class="control-group">
            < p:outputLabel class="control-label" value="FECHA INGRESO:"/>
            < div class="controls"> 
            < p:calendar id="xfingreso" value="#{data.kardex_create.fechaingreso}" pattern="dd-MM-yyyy" mask="true"
                                    required="true" requiredMessage="Ingresar Fecha"/>
                  <h:outputText value="#{data.kardex_create.fechaingreso}">
                   </h:outputText>
                        <h:message for="xfingreso" style="color:red"/>
                    </div> 
                </div>

                < div class="control-group">
                     <p:outputLabel class="control-label" value="HORA INGRESO:"/>
                    < div class="controls">
                        < p:calendar id="xhingreso" value="#{data.kardex_create.horaingreso}" pattern="HH:mm" timeOnly="true"
                                    required="true" requiredMessage="Ingresar Hora"/>
                        <h:outputText value="#{data.kardex_create.horaingreso}">
                        </h:outputText>
                        <h:message for="xhingreso" style="color:red"/>
                   </div> 
                </div>
                <div class="form-actions">
                    <h:commandLink class="btn btn-success" action="#{data.create()}">Guardar</h:commandLink>  
                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                    <a class="btn" href="index.xhtml">Cancelar</a>
                </div>
            </h:form>
            </div>
        </div>
    </h:body>
</html>

-->

ManagedBeanData.java

import dto.Calificador;
import dto.Kardex;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import model.dao.DaoCalificador;
import model.dao.DaoKardex;
import model.dao.impl.DaoKardexImpl;

@ManagedBean(name = "data")
@RequestScoped
public class ManagedBeanData {

private Integer kardex_id;
private List<Kardex> kardex_list; 
private Kardex kardex_create;

public ManagedBeanData() {
    kardex_create = new Kardex();
}

//GETTER Y SETTER DE IDS
public Integer getTipoacto_id() {
    return tipoacto_id;
}

public void setTipoacto_id(Integer tipoacto_id) {
    this.tipoacto_id = tipoacto_id;
}

public Integer getCalificador_id() {
    return calificador_id;
}

public void setCalificador_id(Integer calificador_id) {
    this.calificador_id = calificador_id;
}

public Integer getKardex_id() {
    return kardex_id;
}

public void setKardex_id(Integer kardex_id) {
    this.kardex_id = kardex_id;
}


//GETTER DE LOS LIST 

public List<Kardex> getKardex_list() {
    DaoKardex daoKardex = new DaoKardexImpl();
    kardex_list = daoKardex.kardexQRY();
    return kardex_list;
}

//METODOS PARA EL CRUD

public Kardex getKardex_create() {
    return kardex_create;
}

public void setKardex_create(Kardex kardex_create) {
    this.kardex_create = kardex_create;
}

public String create(){
    DaoKardex daoKardex = new DaoKardexImpl();
    daoKardex.kardexINS(kardex_create);
    return "index";
}

}

DaoKardexImpl.java

import dto.Kardex;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import model.dao.DaoKardex;
import sql.ConectaDB;

public class DaoKardexImpl implements DaoKardex {

    private ConectaDB db;

    public DaoKardexImpl() {
        this.db = new ConectaDB();
    }

    @Override
    public List<Kardex> kardexQRY() {
        List<Kardex> list = null;
        Connection cn = db.getConnection();
        String cmdSQL = "select k.nrokardex, k.fechaingreso, k.horaingreso, k.contratante, "
                + "t.nombreacto, cal.nombreapellidos from kardex k inner join tipoacto t on"
                + "k.idtipoacto = t.idtipoacto inner join calificador cal on "
                + "k.idcalificador = cal.idcalificador order by idkardex desc;";

        if (cn != null) {
            try {
                Statement st = cn.createStatement();
                ResultSet rs = st.executeQuery(cmdSQL);
                list = new ArrayList<>();

                while (rs.next()) {
                    Kardex k = new Kardex();
                    k.setNrokardex(rs.getString(1));
                    k.setFechaingreso(rs.getDate(2));
                    k.setHoraingreso(rs.getTime(3));
                    k.setContratante(rs.getString(4));
                    k.setIdtipoacto(rs.getInt(5));
                    k.setIdcalificador(rs.getInt(6));
                }

            } catch (SQLException e) {
            } finally {
                try {
                    cn.close();
                } catch (SQLException en) {
                }
            }
        }
        return list;
    }

    @Override
    public String kardexINS(Kardex kardex) {
        String result = null;
        Connection cn = db.getConnection();
        String cmdSQL = "insert into kardex (nrokardex, fechaingreso, horaingreso, contratante, idtipoacto, idcalificador) "
                + "values ('?','?','?','?','?','?');";

        if (cn != null) {
            try {
                PreparedStatement pst = cn.prepareStatement(cmdSQL);
                pst.setString(1, kardex.getNrokardex());
                pst.setDate(2, kardex.getFechaingreso());
                pst.setTime(3, kardex.getHoraingreso());
                pst.setString(4, kardex.getContratante());
                pst.setInt(5, kardex.getIdtipoacto());
                pst.setInt(6, kardex.getIdcalificador());

                int n = pst.executeUpdate();

                if (n == 0) {
                    result = "0 filas afectadas";
                }

            } catch (SQLException e) {
                result = e.getMessage();
            } finally {
                try {
                    cn.close();
                } catch (SQLException en) {
                    result = en.getMessage();
                }
            }
        }
        return result;
    }

}

DaoKardex.java

import dto.Kardex;
import java.util.List;

public interface DaoKardex {

    public List<Kardex> kardexQRY();

    public String kardexINS(Kardex kardex);

}

Kardex.java

import java.io.Serializable;
import java.sql.Date;
import java.sql.Time;

public class Kardex implements Serializable{

    private Integer idkardex;
    private Date fechaingreso;
    private Time horaingreso;

    public Kardex() {
    }

    public Kardex(Integer idkardex, Date fechaingreso, Time horaingreso) {
        this.idkardex = idkardex;
        this.fechaingreso = fechaingreso;
        this.horaingreso = horaingreso;

    }

    public Integer getIdkardex() {
        return idkardex;
    }

    public void setIdkardex(Integer idkardex) {
        this.idkardex = idkardex;
    }

    public Date getFechaingreso() {
        return fechaingreso;
    }

    public void setFechaingreso(Date fechaingreso) {
        this.fechaingreso = fechaingreso;
    }

    public Time getHoraingreso() {
        return horaingreso;
    }

    public void setHoraingreso(Time horaingreso) {
        this.horaingreso = horaingreso;
    }

}
    
asked by Max 27.02.2017 в 18:20
source

4 answers

1

To make a conversion from java.util.Date to java.sql.Date we can do it in the following way

java.sql.Date fechaSqlDate = new java.sql.Date(fechaUtilDate.getTime());

for this you can use a method to perform the conversion

public java.sql.Date convertir(java.util.Date fechaUtilDate){
    return new java.sql.Date(fechaUtilDate.getTime());
}

It's a case similar to this

link

A similar question

as fix this java.util.Date can not be cast to java.sql.Date

    
answered by 02.03.2017 / 04:45
source
1

To move from java.util.Date to java.sql.Date it is easiest to use the constructor from the date in milliseconds:

public java.sql.Date convertir(java.util.Date fecha){
    return new java.sql.Date(fecha.getTime());
}

The getTime() method returns the date in milliseconds, and is common to both classes ( java.sql.Date inherits java.util.Date ).

    
answered by 28.02.2017 в 11:48
0

Class java.sql.Date is subclass of java.util.Date . In a model you should use java.util.Date .

In Kardex change:

import java.sql.Date;

a

import java.util.Date;

A Date in SQL has to be normalized to have hours, minutes, seconds and milliseconds set to 0. You have to take this into account where you have to convert from java.sql.Date to java.util.Date.

Probably easiest would be to work in the database with a time stamp ( java.sql.Timestamp ) that you get with rs.getTimestamp() and work with a full date.

    
answered by 27.02.2017 в 19:14
0

You can convert from java.util.Date to java.sql.Date in the following way:

//Estableces el formato que pide el método valueOf
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//La transformas desde ese formato como cadena
java.sql.Date fechaFinal = java.sql.Date.valueOf(sdf.format(fechaOrigen)

With fechaFinal you can now operate as type java.sql.Date .

    
answered by 28.02.2017 в 11:37