Como Fazer consulta em MySql com o campo JXDatePicker

4 respostas
Dayane_Mendes

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!

4 Respostas

Rodrigo_Void

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:



Dayane_Mendes

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

Dayane_Mendes

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!

Jederson_Andre

Algum objeto vazio

Criado 11 de outubro de 2017
Ultima resposta 21 de out. de 2017
Respostas 4
Participantes 3