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?