Estou fazendo uma busca em meu banco local derby e adicionando os dados coletados à uma lista
PreparedStatement ps = conexao.prepareStatement("select data from datas where data >= ? and data <= ?");[
ps.setString(1, dataInicio);
ps.setString(2, dataFim);
// adicionar registros à lista DATAS
o campo data no banco é do tipo java.sql.Date
Quando faço um println para ver as horas, todas aparecem como 12:00:00, quando na verdade foram inseridas no banco de dados com horas diversas.
SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss");
System.out.println("hora = " + sdf.format(DATAS.get(x).getTime()));
Se na sua estrutura do Banco de Dados os campos são do tipo Date porque na hora de vc gravar vc ta passando
uma String!?
Já que são Date grave-os como tal:
PreparedStatement ps = conexao.prepareStatement("select data from datas where data >= ? and data <= ?");[
ps.setDate(1, dataInicio);
ps.setDate(2, dataFim);
Nesse caso as variaveis dataInicio e dataFim devem ser do tipo java.sql.Date ou java.util.Date.
Tentei fazer o limite de seleção de DATAS ( data >=? and data <=? ) com a classe Date mas não funcionou.
Por isso utilizei a String.
De qualquer forma, acredito que o tipo de objeto que passo na busca (String, Date, Timestamp) influencia apenas de que forma vou coletar as Datas, não a hora das mesmas.
Certo?
Pois eh!! qual o formato de Data que vc esta gravando no Banco? isso vai influenciar na sua consulta.
Tipow… eu ja tiver que trabalhar com datas que foram gravadas no banco como String e sempre
quando preciso fazer isso eu uso alguma função especifica do banco pra converter a String em data.
No banco as datas estão gravadas no formato Date.
Como disse, passo String para o DAO porque a busca de um período de tempo não funcionou passando duas Dates…
A varredura está correta, mas, apesar de ter gravado as datas no banco com as horas certas - fiz teste com SimpleDateFormat(“kk:mm:ss”) - os Dates vem do banco com hora 12 PM ou 24…
Acho que de alguma forma as datas não estão sendo registradas com hora no banco…
Quanto as datas vc ja tentou dar um select * from… so pra ver como estão vindo suas datas?
Quanto a gravação das horas, minutos e segundos vc pode passar um Timerstamp.getTime() no
construtor da classe java.sql.Date.
Criei um código de teste que, acho eu, ilustra o que está acontecendo :
public static void main(String[] args) throws ParseException {
Calendar dataCalendar = Calendar.getInstance();
SimpleDateFormat df = new SimpleDateFormat("d/MM/yyyy - kk:mm:ss");
java.sql.Date dataSQL = new java.sql.Date(dataCalendar.getTimeInMillis());
Agendamento novoAgendamento = new Agendamento();
novoAgendamento.setData(dataSQL);
System.out.println("Data e hora inseridas = " + df.format(novoAgendamento.getData()));
AgendamentoDAOLocal novoAgendamentoDAOLocal = new AgendamentoDAOLocal();
novoAgendamentoDAOLocal.inserir(novoAgendamento);
List<Agendamento> lista = novoAgendamentoDAOLocal.buscarTudo();
for (int i = 0; i < lista.size(); i++) {
System.out.println("Retorno do banco de dados " + i + " = " + df.format(lista.get(i).getData().getTime()));
}
}
O resultado do println:
run:
Data e hora inseridas = 29/01/2012 - 10:17:16
novoAgendamento.getData() = 29/01/2012 - 10:17:16
Retorno do banco de dados 0 = 29/01/2012 - 24:00:00
BUILD SUCCESSFUL (total time: 0 seconds)
Estou usando Derby, e me parece que ele possui três tipos de dados temporais :
Date, Time e Timestamp.
Sendo que o date :
“Derby?s SQL DATE type represents a date in the form yyyy-mm-dd with no associated time zone information.”
De acordo com Derby JDBC Implementation Notes