Gostaria de saber como faço para consultar dados por datas em MySql : tenho 2 campos JXDatePicker e quero que ele me retorne dados entre data inicial e data final, No MySql o campo “data” está com o formato “DATE”, “2017-10-11” e no java o campo “data” esta como java.util.Date, tentei fazer a conversão porem ele não filtra as datas, mas também não me retorna nenhum erro, como posso fazer essa conversão?
Este é o método onde faço a consulta
public List<FinancasModel> listaPorDatas() {
Movimentacao m = new Movimentacao();
SimpleDateFormat d = new SimpleDateFormat("yyyy-MM-dd");
String sql = "select * from Financas where dataPagamento between "
+ "" + d.format(m.txt_dataInicio.getDate()) + " and "
+ "" + d.format(m.txt_dataFinal.getDate()) + "";
List<FinancasModel> listaPorDatas = new ArrayList<>();
try {
PreparedStatement ps = getCon().prepareStatement(sql);
ResultSet rs = ps.executeQuery();
if (rs != null) {
while (rs.next()) {
FinancasModel fm = new FinancasModel();
fm.setValor(rs.getDouble(1));
fm.setDataPagamento(rs.getDate(2));
fm.setDataCadastro(rs.getDate(3));
fm.setObservacao(rs.getString(5));
listaPorDatas.add(fm);
}
return listaPorDatas;
} else {
return null;
}
} catch (SQLException e) {
return null;
}
}
Não faça isso, não concatene valores na sql, isso pode permitir SQL Injection.
Sempre que quiser passar algum valor pra sql use PreparedStatement setanto os valores, no caso de data é setDate.
Vc até está usando o PreparedStatement, mas é como comprar um caminhão pra ir passear.
Veja os tutoriais abaixo, tem tudo bem explicado neles:
Olá, aqui estou eu novamente alterei a forma de consultar, porem acho que não estou fazendo do modo correto, pois esta dando um erro.
Este é o metodo para consulta no banco
public List<FinancasModel> listaPorDatas(Date dataInicio, Date dataFinal) {
String sql = "select codfinancas, valor, dataPagamento, dataCadastro, observacao, f.codcategoria, c.descricao, c.tipo "
+ "from financas f inner join categoria c on c.codcategoria = f.codcategoria "
+ "where dataPagamento between ? and ?";
List<FinancasModel> listaPorDatas = new ArrayList<>();
try {
PreparedStatement ps = getCon().prepareStatement(sql);
ps.setDate(1, new java.sql.Date(dataInicio.getTime()));
ps.setDate(2, new java.sql.Date(dataFinal.getTime()));
ResultSet rs = ps.executeQuery();
if (rs != null) {
while (rs.next()) {
FinancasModel fm = new FinancasModel();
fm.setCodFinancas(rs.getInt(1));
fm.setValor(rs.getDouble(2));
fm.setDataPagamento(rs.getDate(3));
fm.setDataCadastro(rs.getDate(4));
fm.setObservacao(rs.getString(5));
CategoriaModel cm = new CategoriaModel();
cm.setCodCategoria(rs.getInt(6));
cm.setDescricao(rs.getString(7));
cm.setTipo(rs.getString(8));
fm.setCodCategoria(cm);
listaPorDatas.add(fm);
}
} else {
return null;
}
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, "Erro: " + e);
}
return null;
}
E este é o método para exibir o resultado pro usuário
public void listaPorDatas(Date dataInicio, Date dataFinal) {
FinancasDAO cd = new FinancasDAO(con);
DefaultTableModel model = (DefaultTableModel) tbl_movimentacao.getModel();
model.setNumRows(0);
List<FinancasModel> listaPorDatas = cd.listaPorDatas(dataInicio,dataFinal);
double despesa = 0;
double renda = 0;
for (FinancasModel fb : listaPorDatas) {
if (fb.getCodCategoria().getTipo().equals("DESPESA")) {
despesa += fb.getValor();
} else {
renda += fb.getValor();
}
model.addRow(new Object[]{
fb.getCodFinancas(),
Utils.ConverteDouble(fb.getValor()),
Utils.converteData(fb.getDataPagamento()),
fb.getCodCategoria().getTipo(),
fb.getCodCategoria().getDescricao(),
fb.getDataCadastro(),
fb.getObservacao()
});
}
txt_despesa.setText(Utils.ConverteDouble(despesa));
txt_renda.setText(Utils.ConverteDouble(renda));
txt_saldo.setText(Utils.ConverteDouble(renda - despesa));
}
E este é o erro
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at br.com.smartadvocacy.telas.Movimentacao.listaPorDatas(Movimentacao.java:42)
at br.com.smartadvocacy.telas.Movimentacao.BuscarMouseClicked(Movimentacao.java:339)
at br.com.smartadvocacy.telas.Movimentacao.access$200(Movimentacao.java:23)
at br.com.smartadvocacy.telas.Movimentacao$4.mouseClicked(Movimentacao.java:244)
at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:270)
at java.awt.Component.processMouseEvent(Component.java:6536)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6298)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4534)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
at java.awt.Container.dispatchEventImpl(Container.java:2280)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
se puder me auxiliar, não sei onde estou errando, desde já agradeço!