[RESOLVIDO] Erro java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date
14 respostas
java-sejava
M
Maks_Silva
privatevoidpesquisar_venda(){if(jtData_inicial.getText().equals(" / / ")){JOptionPane.showMessageDialog(this,"Preencha o campo data inicial.");jtData_inicial.requestFocus();}elseif(jtData_final.getText().equals(" / / ")){JOptionPane.showMessageDialog(this,"Preencha o campo data final.");jtData_final.requestFocus();}else{SimpleDateFormatformat=newSimpleDateFormat("dd/MM/yyyy");Datedatainicial=null;Datedatafinal=null;try{datainicial=newSimpleDateFormat("dd/MM/yyyy").parse(jtData_inicial.getText());datafinal=newSimpleDateFormat("dd/MM/yyyy").parse(jtData_final.getText());}catch(ParseExceptionex){Logger.getLogger(RelatorioFinanceiro.class.getName()).log(Level.SEVERE,null,ex);}StringdataInicial=newSimpleDateFormat("yyyy-MM-dd 00:00:00").format(datainicial);StringdataFinal=newSimpleDateFormat("yyyy-MM-dd 23:59:59").format(datafinal);if((!jtData_inicial.getText().equals(""))&&(!jtData_final.getText().equals(""))){Stringsql="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(SQLExceptionex){Logger.getLogger(Main.class.getName()).log(Level.SEVERE,null,ex);}catch(NullPointerExceptionex){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)
Vc n pode fazer cast ditero para sql.Date.
Precisa criar um: new java.sql.Date(seuDate.getTime())
M
Maks_Silva
agora deu este erro
java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).
quando clico duas vezes
Rodrigo_Void1 like
Vc está concatenando valor e passando parametro!???
Ou um ou outro. Mas concatenar n se faz
M
Maks_Silva
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
Dragoon
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!
M
Maks_Silva
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
staroski2 likes
Na tentativa e erro você não vai aprender.
Sugiro realmente pegar alguma apostila, livro ou fazer um curso.
privatevoidpesquisar_venda(){if(jtData_inicial.getText().equals(" / / ")){JOptionPane.showMessageDialog(this,"Preencha o campo data inicial.");jtData_inicial.requestFocus();}elseif(jtData_final.getText().equals(" / / ")){JOptionPane.showMessageDialog(this,"Preencha o campo data final.");jtData_final.requestFocus();}else{SimpleDateFormatformat=newSimpleDateFormat("dd/MM/yyyy");Datedatainicial=null;Datedatafinal=null;try{datainicial=format.parse(jtData_inicial.getText());datafinal=format.parse(jtData_final.getText());}catch(ParseExceptionex){Logger.getLogger(RelatorioFinanceiro.class.getName()).log(Level.SEVERE,null,ex);}if((!jtData_inicial.getText().equals(""))&&(!jtData_final.getText().equals(""))){Stringsql="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 parametrostry{pst=conexao.prepareStatement(sql);pst.setDate(1,newjava.sql.Date(datainicial.getTime()));// 1 para a primeira interrogação pst.setDate(2,newjava.sql.Date(datafinal.getTime()));// 2 para a segunda interrgaçãors=pst.executeQuery();tbVendas.setModel(DbUtils.resultSetToTableModel(rs));}catch(SQLExceptionex){Logger.getLogger(Main.class.getName()).log(Level.SEVERE,null,ex);}catch(NullPointerExceptionex){JOptionPane.showMessageDialog(null," Relatorio não localizado nesta data!");}}}}
realmente vc esta certo, o problema q esses cursos ensinam somente o mais basico.
darlan_machado2 likes
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.
M
Maks_Silva
@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
staroski1 like
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 .
M
Maks_Silva
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.
M
Maks_Silva
Descobri o problema
Comentei este código
// tmVendas = (DefaultTableModel) tbVendas.getModel(); Obrigado a comentar //tmVendas.setNumRows(0);
e acabou o erro
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