Erro na consulta por data

7 respostas
EDIMIL

Pessal estou reabrindo este tópico, porque não consigo achar uma solução para o meu problema com data, por favor me ajudem

view plaincopy to clipboardprint?
import java.awt.event.ActionEvent;   
import java.awt.event.ActionListener;   
import java.sql.SQLException;   
import java.text.DateFormat;   
import java.text.ParseException;   
import java.text.SimpleDateFormat;   
import java.util.Date;   
import java.util.logging.Level;   
import java.util.logging.Logger;   
import javax.swing.JFormattedTextField;   
import javax.swing.JOptionPane;   
import javax.swing.table.DefaultTableModel;   
import utilitarios.conexao;   
  
/**  
*  
* @author Edson  
*/   
public class ConsultarVenda extends javax.swing.JFrame {   
  
    DefaultTableModel modelo;   
    DefaultTableModel modelo2;   
    conexao cone = new conexao();   
    Date dataIni = null;   
    Date dataFim = null;   
    String sql = "select venda_cod,venda_data,venda_vl_total,venda_desc,venda_tt_geral,venda_qtd,cli_nome"   
            + " from venda,cliente where venda.cli_cod = cliente.cli_cod and venda_data between '" + dataIni + "'and'" + dataFim + "' ";   
  
    /** Creates new form ConsultarVenda */   
    public ConsultarVenda() {   
        initComponents();   
        cone.conectar();   
        HandlerText ht = new HandlerText();   
        //jTextField1.addActionListener(ht);   
        //jTextField2.addActionListener(ht);   
        jFormattedTextField1.addActionListener(ht);   
        jFormattedTextField2.addActionListener(ht);   
    }   
  
    private class HandlerText implements ActionListener { // Classe para utilizar tecla Enter/ JTextField   
  
        public void actionPerformed(ActionEvent e) {   
            /*if (e.getSource() == jTextField1) {  
            jTextField2.requestFocus();  
            }  
            if (e.getSource() == jTextField2) {  
            dataIni = DatejTextField1.getText();  
            preencheTabVenda();  
            }*/   
            if (e.getSource() == jFormattedTextField1) {   
                jFormattedTextField2.requestFocus();   
            }   
            if (e.getSource() == jFormattedTextField2) {   
                DateFormat formato = new SimpleDateFormat("yyyy-MM-dd");   
                try {   
                    dataIni = formato.parse(jFormattedTextField1.getText());   
                    dataFim = formato.parse(jFormattedTextField2.getText());   
                } catch (ParseException ex) {   
                    Logger.getLogger(ConsultarVenda.class.getName()).log(Level.SEVERE, null, ex);   
                }                   
                preencheTabVenda();   
            }   
        }   
    }

quando executo o programa, dá a seguinte mensagem de erro:

03/04/2010 05:30:41 view.ConsultarVenda$HandlerText actionPerformed   
SEVERE: null   
java.text.ParseException: Unparseable date: "30/03/2010"

nesta linha:

dataIni = formato.parse(jFormattedTextField1.getText());

Já procurei aqui no forum mas nada funcionou, alguém me ajuda…

7 Respostas

pmlm

EDIMIL:
DateFormat formato = new SimpleDateFormat("yyyy-MM-dd");

java.text.ParseException: Unparseable date: "30/03/2010"

Os formatos da data estão diferentes.

fesaab

a string da data que vc quer transformar está no formato dd/MM/yyyy (30/03/2010) e vc criou o SimpleDateFormat com o formato yyyy-MM-dd

Qualquer data que vc quiser que o seu SimpleDateFormat converta para o objeto Date deve estar no mesmo formato do SimpleDateFormat.

Só troca essa linha:

DateFormat formato = new SimpleDateFormat("yyyy-MM-dd");

por essa:

DateFormat formato = new SimpleDateFormat("dd-MM-yyyy");
fesaab

a string da data que vc quer transformar está no formato dd/MM/yyyy (30/03/2010) e vc criou o SimpleDateFormat com o formato yyyy-MM-dd

Qualquer data que vc quiser que o seu SimpleDateFormat converta para o objeto Date deve estar no mesmo formato do SimpleDateFormat.

Só troca essa linha:

DateFormat formato = new SimpleDateFormat("yyyy-MM-dd");

por essa:

DateFormat formato = new SimpleDateFormat("dd-MM-yyyy");
EDIMIL

Pessoal mesmo invertendo a ordem da String ocorre o mesmo erro, acho que é algum problema com java.util.Date e java.sql.Date, vocês têm mais alguma opção?

EDIMIL

Socorro

fesaab

poxa desculpa…
erro meu…

ao inves de criar o SimpleDateFormat com “dd-MM-yyyy”, cria com “dd/MM/yyyy”

eh com as barras e nao com o hifen

EDIMIL

Pessoal valeu, consegui fazer:

if (e.getSource() == jFormattedTextField2) {
            SimpleDateFormat formato = new SimpleDateFormat("yyyy-MM-dd");
            java.util.Date dataInicio = (java.util.Date) jFormattedTextField1.getValue();
            java.util.Date dataFim = (java.util.Date) jFormattedTextField2.getValue();
            Date dat1 = Date.valueOf(formato.format(dataInicio));
            Date dat2 = Date.valueOf(formato.format(dataFim));
            String sql = "select venda_cod,venda_data,venda_vl_total,venda_desc,venda_tt_geral,venda_qtd,cli_nome"
            + " from venda,cliente where venda.cli_cod = cliente.cli_cod and venda_data between  '"+dat1+"' and '"+dat2+"'";
            preencheTabVenda(sql);
            }
Criado 3 de abril de 2010
Ultima resposta 5 de abr. de 2010
Respostas 7
Participantes 3