Boa noite a todos!!
Igualmente a muitos que postam aqui estou iniciando em JAVA e me deparei com um problema em meu projeto que são as datas aliadas a consultas SQL.
Estou utilizando o SQL Server e em uma determinada tabela tenho um campo date.
O meu problema está em
1°) Obter a data de um JCalendar e armazenar ela em uma variável para poder fazer uma consulta na tabela.
Fiz o seguinte:
Ao clicar no JCalendar.
private void jCalendarAgendaPropertyChange(java.beans.PropertyChangeEvent evt) {
SimpleDateFormat formato = new SimpleDateFormat("d 'de' MMMM 'de' yyyy");
String data = formato.format(jCalendarAgenda.getDate());
lblDataPrincipal.setText(data);
try {
buscarDiaAgenda(jCalendarAgenda.getDate());
} catch (ParseException ex) {
Logger.getLogger(frmAgenda.class.getName()).log(Level.SEVERE, null, ex);
}
}
o Metodo buscarDiaAgenda captura a data.
public Date buscarDiaAgenda(Date diaAgenda) throws ParseException {
SimpleDateFormat formato = new SimpleDateFormat("yyyy-MM-dd");
String dia = formato.format(diaAgenda);
Date diaCalendario = formato.parse(dia);
System.out.println(diaCalendario);
return diaCalendario;
}
2°) A minha consulta SQL está em uma outra Classe e já tentei de varias formas com o pouco conhecimento que tenho de levar esta informação para esta Classe mas não consegui.
Outro detalhe não sei se preciso formatar a data para poder utilizar ela na minha consulta SQL.
Se alguém puder ajudar ficarei muito agradecido.
Acredito que consegui resolver a parte de atribuir a data a um metodo e o mesmo ser utilizado na consulta SQL, porém acredito que estou errando na sintaxe de como consultar.
String agendaSQL = “SELECT * FROM tblAgenda WHERE Data=’”+a.getDiaCalendario()+"’";
A forma de como estou fazendo com data está correta??
A data está no método a.getDiaCalendario().
Lembrando que estou utilizado como banco de dados o SQL SERVER e o tipo de campo é o date.
Bom dia,
geralmente datas no SQL você passa neste formato --> 'dd/mm/yyyy’
ex.: "SELECT * FROM TABELA WHERE DATA = ‘01/05/2017’ "
Eu não tenho experiência com SQL Server
não sei se ajuda mas vou postar um exemplo aqui usando MVC e DAO
private StringBuilder sql = new StringBuilder();
public void retornaPorData(ModeloAgenda agenda) throws Exception{
try{
sql.delete(0, sql.length());
sql.append("SELECT * FROM tblAgenda WHERE Data='");
sql.append(conversorDeDateParaStrig(agenda.getDate())).append("' ");
//este seria um metodo vindo de sua fábrica de conexões que executa SQLs
super.executarSQL(sql.toString());
super.resultset.first();
//você chama seu modelo e seta os atributos dele ex:
agenda.setCodigo(super.resultset.getInt("CODIGO"));
agenda.setDescricao(super.resultset.getString("DESCRICAO"));
//...
}catch (Exception e){
throw e;
}
}
//aqui o metodo conversor de data para string
public String conversorDeDateParaStrig(Date data){
DateFormat inFormat = new SimpleDateFormat("dd/MM/yyyy");
return inFormat.format(data);
}
Ficou meio vago seu problema, se puder especificar mais fica mais fácil te ajudar.
esse formato do SimpleDateFormat esta te mostrando a data ???
Faz assim… armazene dentro de um ArrayList e faz um forEach
Boa tarde!!
Pessoal muito obrigado pela ajuda…
Consegui resolver com o que o Bruno iniciou a conversa.
“geralmente datas no SQL você passa neste formato --> 'dd/mm/yyyy’
ex.: "SELECT * FROM TABELA WHERE DATA = ‘01/05/2017’ "”
É bem simples mas como não sabia a sintaxe com datas (JAVA) então estava com dificuldade para gerar a consulta. Estou muito acostumado com o VBA que as datas sao inseridas na sintaxe SQL entre #" "#.
A solução foi que as datas são passadas na sintaxe entre aspas e para o SQL SERVER no campo tipo date o formato no meu caso está ‘yyyy/mm/dd’.
Segue abaixo os meus codigos corrigidos. Nao sei se é o mais correto mas está funcionando.
//Ao clicar em uma data do JCalendar
private void jCalendarAgendaPropertyChange(java.beans.PropertyChangeEvent evt) {
try {
buscarDiaAgenda();
} catch (ParseException ex) {
Logger.getLogger(frmAgenda.class.getName()).log(Level.SEVERE, null, ex);
}
}
//Metodo para buscar o dia no JCalendar, formatar e passa para a informacao para o metodo preencherAgendaTemp() localizada em outra Classe.
public void buscarDiaAgenda() throws ParseException {
Agenda a = new Agenda();
SimpleDateFormat formato = new SimpleDateFormat("yyyy/MM/dd");
String dia = formato.format(jCalendarAgenda.getDate());
Date diaCalendario = formato.parse(dia);
a.setDiaCalendario(diaCalendario);
agendaDAO.preencherAgendaTemp(a);
}
Obrigado pela ajuda pessoal.
Abraco.