Como Fazer consulta em MySql com o campo JXDatePicker

Boa Noite!

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 :point_down:

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;

    }
}

Obrigada!

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:



Ok, obrigada pelas informações são muito uteis.

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!

Algum objeto vazio