[RESOLVIDO] Erro java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date

private void pesquisar_venda() {
	if (jtData_inicial.getText().equals("  /  /    ")) {
	    JOptionPane.showMessageDialog(this, "Preencha o campo data inicial.");
	    jtData_inicial.requestFocus();
	} else if (jtData_final.getText().equals("  /  /    ")) {
	    JOptionPane.showMessageDialog(this, "Preencha o campo data final.");
	    jtData_final.requestFocus();
	} else {

	    SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");

	    Date datainicial = null;
	    Date datafinal = null;
	    try {
		datainicial = new SimpleDateFormat("dd/MM/yyyy").parse(jtData_inicial.getText());
		datafinal = new SimpleDateFormat("dd/MM/yyyy").parse(jtData_final.getText());
	    } catch (ParseException ex) {
		Logger.getLogger(RelatorioFinanceiro.class.getName()).log(Level.SEVERE, null, ex);
	    }
	    String dataInicial = new SimpleDateFormat("yyyy-MM-dd 00:00:00").format(datainicial);
	    String dataFinal = new SimpleDateFormat("yyyy-MM-dd 23:59:59").format(datafinal);

	    if ((!jtData_inicial.getText().equals("")) && (!jtData_final.getText().equals(""))) {
		String sql = "SELECT venda.data_inc as Data, \n"
			+ "	clientes.nome AS Nome,\n"
			+ "	usuario.usuario AS Usuário,\n"
			+ "	venda.total as Total\n"
			+ "FROM venda\n"
			+ "	INNER JOIN clientes ON \n"
			+ "	 venda.id_cliente = clientes.id \n"
			+ "	INNER JOIN usuario ON \n"
			+ "	 venda.id_usuario = usuario.id \n"
			+ "     \n"
			+ "     where venda.data_inc between '" + datainicial + "' and '" + datafinal + "'";
		try {
		pst = conexao.prepareStatement(sql);
		pst.setDate(1, (java.sql.Date) datainicial);
		pst.setDate(2, (java.sql.Date) datafinal);
		rs = pst.executeQuery();
		tbVendas.setModel(DbUtils.resultSetToTableModel(rs));
		} catch (SQLException ex) {
		    Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
		} catch (NullPointerException ex) {
		    JOptionPane.showMessageDialog(null, " Relatorio não localizado nesta data!");
		}
	    }
	}
    }

Exception in thread “AWT-EventQueue-0” java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date
at br.com.visual.VendasConsulta.pesquisar_venda(VendasConsulta.java:994)

o campo data_inc é do tipo timestamp

image

Vc n pode fazer cast ditero para sql.Date.
Precisa criar um:
new java.sql.Date(seuDate.getTime())

1 curtida

agora deu este erro

java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).
quando clico duas vezes

Vc está concatenando valor e passando parametro!???
Ou um ou outro. Mas concatenar n se faz

1 curtida

me desculpe a ignorancia eu sou burro nisso, e realmente como vc ja tinha me dito eu nao sei bem o q estou fazendo, mas sou teimoso, uma hora eu aprendo.
nao entendi como fazer, perdoi me por te importunar

Tem coisas erradas na codificação, onde você passa diretamente a data na SQL (erro e problemas de injeção de SQL) e logo após cria dois paramentros … ??? isso que não entendi.

Como já foi dito esse cast não funciona !!! e não é necessário ou é ???

Tem problemas conceituais o seu código, tem que revisar e refatorar!

problema no código, pelo menos isso eu sei. é q to fazendo na tora, vou pesquisando aqui pra ver oq eu errei uma hora eu consigo

obrigado

Na tentativa e erro você não vai aprender.
Sugiro realmente pegar alguma apostila, livro ou fazer um curso.

private void pesquisar_venda() {
    if (jtData_inicial.getText().equals("  /  /    ")) {
        JOptionPane.showMessageDialog(this, "Preencha o campo data inicial.");
        jtData_inicial.requestFocus();
    } else if (jtData_final.getText().equals("  /  /    ")) {
        JOptionPane.showMessageDialog(this, "Preencha o campo data final.");
        jtData_final.requestFocus();
    } else {

        SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");

        Date datainicial = null;
        Date datafinal = null;
        try {
            datainicial = format.parse(jtData_inicial.getText());
            datafinal = format.parse(jtData_final.getText());
        } catch (ParseException ex) {
            Logger.getLogger(RelatorioFinanceiro.class.getName()).log(Level.SEVERE, null, ex);
        }
        if ((!jtData_inicial.getText().equals("")) && (!jtData_final.getText().equals(""))) {
            String sql = "SELECT venda.data_inc as Data, \n"
                    + " clientes.nome AS Nome,\n"
                    + " usuario.usuario AS Usuário,\n"
                    + " venda.total as Total\n"
                    + "FROM venda\n"
                    + " INNER JOIN clientes ON \n"
                    + "  venda.id_cliente = clientes.id \n"
                    + " INNER JOIN usuario ON \n"
                    + "  venda.id_usuario = usuario.id \n"
                    + "     \n"
                    + "     where venda.data_inc between ? and ?"; // perceba as interrogações representando os parametros
            try {
                pst = conexao.prepareStatement(sql);
                pst.setDate(1, new java.sql.Date(datainicial.getTime())); // 1 para a primeira interrogação 
                pst.setDate(2, new java.sql.Date(datafinal.getTime()));   // 2 para a segunda interrgação
                rs = pst.executeQuery();
                tbVendas.setModel(DbUtils.resultSetToTableModel(rs));
            } catch (SQLException ex) {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            } catch (NullPointerException ex) {
                JOptionPane.showMessageDialog(null, " Relatorio não localizado nesta data!");
            }
        }
    }
}
2 curtidas

Obrigado @staroski

realmente vc esta certo, o problema q esses cursos ensinam somente o mais basico.

Mas “na tora”, nem o básico você aprende.
Um dos problemas que temos é a pressa, a vontade de pular etapas.
Você não começou a aprender matemática a partir da Fórmula de Bhaskara, precisou aprender os números, as operações básicas, operações mais complexas, depois as primeiras equações, inequações, até chegar em equações de segundo grau.
Um passo de cada vez.

2 curtidas

@darlan_machado amigo se eu tivesse perguntado algo muito simples eu te dava razão, o forum aqui pra mim é o ultimo caso, so sabe criticar, e mandar se virá

o @staroski fez uma critica construitiva e me ajudou

obrigado

Mas sua pergunta realmente é simples.

A resposta do seu problema já havia sido respondida pelo amigo @Rodrigo_Void, que explicou que você estava concatenando valores na query e também setando parâmetros, o que não é certo.

Assim como nosso amigo @darlan_machado, eu também te disse que não dá pra aprender na tentativa e erro.

Repetindo: Um passo de cada vez .

1 curtida

eu te escuto, então perdoem me

Funcionou perfeitamente muito obrigado!!!

só tem um problema na hora de buscar se for o mesmo dia

faltou isso

String dataInicial = new SimpleDateFormat(“yyyy-MM-dd 00:00:00”).format(datainicial);
String dataFinal = new SimpleDateFormat(“yyyy-MM-dd 23:59:59”).format(datafinal);

onde eu encaixo este códig??

para ele dar a consulta do começo do dia até o final do dia.

Descobri o problema

Comentei este código

// tmVendas = (DefaultTableModel) tbVendas.getModel(); Obrigado a comentar
//tmVendas.setNumRows(0);
e acabou o erro

Graças a Deus

@staroski
@sistemas_robustos

so tem um problema eu quero tirar o relatorio do dia, mas nao da certo notei que para eu conseguir eu tenho q acrescentar 1 dia na data final, pra mim isto é um erro

como eu resolveria ??

creio q se eu inserisse este codigo daria certo mas eu insiro e nao da certo
String dataInicial = new SimpleDateFormat(“yyyy-MM-dd 00:00:00”).format(datainicial);
String dataFinal = new SimpleDateFormat(“yyyy-MM-dd 23:59:59”).format(datafinal);