Olá Galera,
seguinte, estou fazendo um pequeno cadastro de fornecedores utilizando JSF e PrimeFaces. Ao iniciar o meu servidor ele me apresenta o seguinte erro :
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: org.postgresql.jdbc4.Jdbc4Statement cannot be cast to java.sql.PreparedStatement
javax.faces.webapp.FacesServlet.service(FacesServlet.java:521)
root cause
java.lang.ClassCastException: org.postgresql.jdbc4.Jdbc4Statement cannot be cast to java.sql.PreparedStatement
dao.FornecedorDao.(FornecedorDao.java:24)
bean.FornecedorBean.getFornecedores(FornecedorBean.java:78)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
javax.el.BeanELResolver.getValue(BeanELResolver.java:64)
com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
org.apache.el.parser.AstValue.getValue(AstValue.java:169)
org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:192)
com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:193)
javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:181)
javax.faces.component.UIData.getValue(UIData.java:557)
javax.faces.component.UIData.getDataModel(UIData.java:1297)
javax.faces.component.UIData.setRowIndex(UIData.java:450)
com.sun.faces.renderkit.html_basic.TableRenderer.encodeBegin(TableRenderer.java:81)
javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:829)
javax.faces.component.UIData.encodeBegin(UIData.java:940)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1672)
javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:854)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1674)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1677)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1677)
com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:399)
com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:509)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.2 logs.
Se alguém puder me ajudar, não tenho a minima idéia de por onde começar a resolver este erro.
Parece que você está utilizando o PreparedStatement errado:
org.postgresql.jdbc4.Jdbc4Statement cannot be cast to java.sql.PreparedStatement
Poderia ser mais preciso? Sou meio novo na área de Web.
Mas isso não é problema web.
No código que você utiliza PreparedStatement, verifique qual o pacote você está importando.
Estou utilizando o import java.sql.PreparedStatement;
Tem como você colocar o código da consulta?
O método da DAO
[code]public List listar()
{
List fornecedores = new ArrayList();
try
{
ResultSet rs = stmt.executeQuery(“SELECT * FROM fornecedor ORDER BY nome”);
while(rs.next())
{
Fornecedor fornecedor = new Fornecedor();
fornecedor.setCod(rs.getInt(“cod”));
fornecedor.setNome(rs.getString(“nome”));
fornecedor.setCep(rs.getString(“cep”));
fornecedor.setEndereco(rs.getString(“endereco”));
fornecedor.setCnpj(rs.getString(“cnpj”));
fornecedor.setCidade(rs.getString(“cidade”));
fornecedor.setUf(rs.getString(“uf”));
fornecedor.setInscricaoestadual(rs.getString(“inscricaoestadual”));
fornecedor.setEmail(rs.getString(“email”));
fornecedor.setTelefone(rs.getString(“telefone”));
fornecedores.add(fornecedor);
}
}
catch (Exception e) {
e.printStackTrace();
}
finally {
conexao.fecharConexao();
}
return fornecedores;
}[/code]
Bean :
[code] public DataModel getFornecedores()
{
fornecedorDAO = new FornecedorDao();
List fornecedorList = fornecedorDAO.listar();
fornecedores = new ListDataModel(fornecedorList);
return fornecedores;
}
public void setFornecedores(DataModel<Fornecedor> fornecedores)
{
this.fornecedores = fornecedores;
}[/code]
E a página :
[code]
<h:head>
<CENTER>
<h1>Consulta de Fornecedores</h1>
</CENTER>
</h:head>
<h:body>
<h:form>
<h:dataTable value="#{fornecedorBean.fornecedores}" var="c">
<h:column>
<f:facet name="header"><h:outputText value="Código"/></f:facet>
<h:outputText value="#{c.cod}"/>
<f:facet name="header"><h:outputText value="Nome"/></f:facet>
<h:outputText value="#{c.nome}"/>
<f:facet name="header"><h:outputText value="CEP"/></f:facet>
<h:outputText value="#{c.cep}"/>
<f:facet name="header"><h:outputText value="Endereço"/></f:facet>
<h:outputText value="#{c.endereco}"/>
<f:facet name="header"><h:outputText value="CNPJ"/></f:facet>
<h:outputText value="#{c.cnpj}"/>
<f:facet name="header"><h:outputText value="Cidade"/></f:facet>
<h:outputText value="#{c.cidade}"/>
<f:facet name="header"><h:outputText value="UF"/></f:facet>
<h:outputText value="#{c.uf}"/>
<f:facet name="header"><h:outputText value="Inscrição Estadual"/></f:facet>
<h:outputText value="#{c.inscricaoestadual}"/>
<f:facet name="header"><h:outputText value="E-mail"/></f:facet>
<h:outputText value="#{c.email}"/>
<f:facet name="header"><h:outputText value="Telefone"/></f:facet>
<h:outputText value="#{c.telefone}"/>
</h:column>
</h:dataTable>
</h:form>
</h:body>
[/code]
Onde e como você instancia o stmt?
O cast que o erro se referir, eu creio que seja esse na DAO, mas não vejo problema aqui :
[code] public FornecedorDao()
{
conexao = new Conexao();
try
{
stmt = (PreparedStatement) conexao.getConexao().createStatement();
}catch(SQLException ex)
{
ex.printStackTrace();
}
} [/code]
O método createStatement retorna um objeto do tipo Statement. Chame o método prepareStatement para obter um PreparedStatement (esse casting nem será necessário).
Muito obrigado pela ajuda. Consegui resolver o problema com as dicas acimas!