Recuperar campo datetime do mysql

Gostaria de saber como faço para recuperar um campo datetime do MySql.

Olá jorge,

Trabalhar com datas em Java e MySQL é meio chatinho…
Eu tenho uma classe que recebi de um membro aqui do forum que uso sempre e é muito legal…ela faz a conversão de data do MySql que é formato iso para formato abnt brazil e vice versa…

mas para pegar o valor de um campo date time do MySql eu uso String data=rs.getString(“Campo_Data”); porem éla virá escrita como 2010-26-07 hh:mm:ss…por isso uso essa classe para conversão ok!

posso te passar por e-mail ok!

me passe seu e-mail…

Araço T+

Assim ele trás todas as datas que tiverem assim no banco: 2010-07-26 00:00:00

SELECT * FROM `tabela` WHERE data_hora = '2010-07-26'

ou

Para trazer exatamente a data e hora informada:

SELECT * FROM `tabela` WHERE data_hora = '2010-07-26 11:58:20'

Então fiz exatamente como vc disse, pego a data em formato string e depois recebo um exception.

Se puder me manda a classe no meu email jorge@luper.com.br.

Grato

romarcio quando formato a data bonitinha assim na string sql nao tenho problemas, porem como as datas vem de variaveis não tem como eu formata-las deste modo.

Faz algo do tipo:

    private Date getDataFormatted(final String dataSt) throws Exception {
        //data eh recebida assim: 26/07/2010 06:05:20

        Date data = null;
        try {
            DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
            //transformar em 2010/07/26 06:05:20 como no banco de dados

            String dataTemp = dataSt.substring(6, 10) +  dataSt.substring(2, 6)  + dataSt.substring(0, 2) + dataSt.substring(10, 19);

            data = dateFormat.parse(dataTemp);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return data;
    }

romarcio mesmo com a implementação da sua classe segue o print do erro apresentado.

No Mysql a coluna em questão está criada como DateTime ou TimeStamp?

Se estiver como DateTime não deveria haver problemas.

E o atributo na sua classe deve ser do tipo Date.

Esta como datetime mesmo.
abaixo segue o log do erro:

SEVERE: java.text.ParseException: Unparseable date: “3-1809-020 17:42:49”
at java.text.DateFormat.parse(DateFormat.java:337)
at dt.FormatData.getDataFormatted(FormatData.java:18)
at db.OcomonDB.consultarpornome(OcomonDB.java:123)
at servlet.TelaResultPesqServlet.processRequest(TelaResultPesqServlet.java:47)
at servlet.TelaResultPesqServlet.doGet(TelaResultPesqServlet.java:77)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:734)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:277)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:332)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:233)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
at java.lang.Thread.run(Thread.java:619)

ta mto estranho este erro !!!

O erro ta no formato da data: 3-1809-020 17:42:49

Tem que ver da onde está vindo esse formato estranho, se vc está usando o método que lhe passei antes, o formato recebido pelo parametro deve ser assim: 26/07/2010 06:05:20, então veja se ele está mesmo recebendo a data deste modo para converter para o padrão do mysql.

Outra coisa, tenha certeza que o Date seja importado do java.util.Date, e não do java.sql.Date.

romancio ele transforma o conteudo da variavel neste formato apos passar pelo seu metodo. Continuo com o erro, ja fiz de td e nao consegui soluciona-lo

Seguinte, acho que entendi mal.

Você precisa recuperar a data do banco ou salvar a data no banco?

Se for salvar, o método que te passei funciona OK, pq uso ele em uma aplicação de testes que tenho.

Se for recuperar a data para exibir formatada assim: 26/10/2010 19:10:59, dai pode usar esse método:

    //recebida como 2010-07-26 06:05:20
    //transformar em 26-07-2010 06:05:20
    private String formatData(Date dataHora) {
        DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
        String newDate = dateFormat.format(dataHora);
        return newDate;
    }

Caso seja mesmo salvar em banco, dai eu só poderia te ajudar se desse uma olha no seu sistema, para entender pq não está dando certo.

romancio agora a aplicação apresenta o erro conforme o print.
vc me dizer a causa?

[quote=jorge.david]romancio agora a aplicação apresenta o erro conforme o print.
vc me dizer a causa?[/quote]

Acredito que esse erro seja pq foi importado o pacote java.sql.Date e não o java.util.Date.

Da uma conferida nos imports que vc fez nas classes que trabalha com atributos do tipo Date.

Foi a primeira coisa que eu olhei… porem todos os imports estão apontando para java.util.date…

Posta a tua classe de conexão, classe e classe onde tem os metodos envolvidos.

E o log de erro.

Segue em anexo as classes…

Olha só:

public class FormatarData {

    //recebida como 2010-07-26 06:05:20
    //transformar em 26-07-2010 06:05:20
    public String getFormatDateToStringToExibir(Date dataHora) {
        DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
        String newDate = dateFormat.format(dataHora);
        return newDate;
    }

    //recebida como 26-07-2010 06:05:20
    //transformar em 2010-07-26 06:05:20
    public String getFormatDateToStringToInserirDB(Date date) {
        DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        String newDate = dateFormat.format(date);
        return newDate;
    }
}

Dai para exibir:

        FormatarData fdt = new FormatarData();

            while (rs.next()) { 
                ...
                String data =  fdt.getFormatDateToStringToExibir(rs.getDate(5)); 
            }

O que acontece, o resultSet quando feito assim: rs.getDate() retorna um Date do tipo java.sql.Date por isso dava o erro. Então faz ele enviar direto para uma String ao invés de fazer isso:

                Date dt = rs.getDate("data_abertura");

                FormatData d = new FormatData();

                String dta = d.formatData(dt);

Vc pode fazer assim tambem:

            while (rs.next()) { //anda de registro em registro ate o final da tabela
                //Trabalhando com string
                String dt = fmt.getDataFormatada(rs.getString("data_abertura"));
                System.out.println(dt);
            }

    //caso não queira retornar a hora, retire do método essa parte:  + data.substring(10, 19); 
    public String getDataFormatada(String data) {
        String newDate = data.substring(8, 10) +"/"+data.substring(5, 7)+"/"+data.substring(0, 4) + data.substring(10, 19);
        return newDate;        
    }

Cara ta complicado. Nunca pensei que fosse tão dificl mexer com campos dataTime em java.
esta acontecendo o mesmo erro.
Em anexo estao todas as minhas classes .java
Tem como vc verificar se eu estou fazendo algo de errado?