Converter String para formato "yyy-MM-DD" com data como tipo de dados

Reclamou Lenita:

Eu estou tentando obter os dados armazenados no banco de dados, obtendo a data, em seguida, preencher a tabela.

    List<String> contents = new ArrayList<>();
    List<Record> records

try {
        Session session = sessionFactory.getCurrentSession();
        Query<World> query = null;

        query = session.createQuery("from World where date like :dateCont, World.class);
        query.setParameter("dateCont", "%" + contents.get(0) + "%");

        worlds = query.getResultList();

    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

O problema aqui é que ele me dá uma exceção de erro:

java.lang.ClassCastException: java.lang.String classe não pode ser convertido para a classe java.util.Date (java.lang.String e java.util.Date estão no módulo java.base do carregador 'bootstrap)

Eu sei o que está errado, porque os List<String> contentsvalores são corda e precisava ser convertido em Data, mas eu tentei tantos códigos e ele não funciona.

//The following are the codes that I tried but it won't work:

//FIRST

 Date date = new SimpleDateFormat("MM/dd/yyyy").parse(contentsStart.get(0));
 new SimpleDateFormat("yyyy-MM-dd").format(date);

//---------------------------------------

//SECOND

Date newDate;
DateFormat formatter = null;

formatter = new SimpleDateFormat("yyyy-MM-dd");
newDate = (Date) formatter.parse(contentsStart.get(0));

Então, há alguma maneira de mudar o valor dado à data, mas que deveria mantém o formato "AAAA-MM-DD" e o tipo de dados deve ser Data.

PS: o formato da data no banco de dados é "AAAA-MM-DD" também. Tanto o meu campo entidade data e data a partir da DB é tanto a data como seu tipo de dados.

Boris Navio:

Você pode usar o likeoperador só na corda ( VARCHARcampos). Na cláusula WHERE você tem que converter seu campo para string (usando a função format), a fim de ser capaz de usar LIKE. Então você tem que chamar a função de conversão (também) na consulta.

Infelizmente, não há DATA-funções em EJBQL, então você vai ter que mudar para a consulta nativa. Por exemplo, para Oracle você pode usar TO_CHARcomo esta

SELECT ... WHERE TO_CHAR(date, 'MM/DD/YYYY') LIKE ...

Para um desempenho bom você terá que adicionar um índice funcional.

Veja também http://www.sqlines.com/oracle-to-sql-server/to_char_datetime


Uma alternativa seria a de adicionar uma nova coluna de cadeia date_string, que irá conter a representação formatada de sua data e usar esta coluna com LIKE. Mas você terá que fazer absolutamente certo, que ambas as datas são sempre sincronizados.

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=315969&siteId=1
Recomendado
Clasificación