Boa tarde meu povo.
Preciso de uma ajudinha aqui, estou montando um projeto com jsf+jdbc.
Criei a ConnectionFactory, os DAOs e o ManagedBean, porém estou tendo uma série de problemas com essa conexão. Primeiro o erro apontava que o Driver não estava sendo encontrado, mesmo eu tendo adicionado ele usando maven… Resolvi isto Adicionando a linha Class.forName(“com.mysql.jdbc.Driver”) - cheguei a ler que este método não era mais necessário, mas sem isto o projeto não está encontrando o driver…
Após adicionar isso ele me retorna nullPointer. O que está me deixando louco, é que o DAO funciona, testei ele com uma classe main que montei para testar os DAOs antes conectá-los aos MBs.
Sou iniciante, então acredito que seja algum erro bobo de lógica que me passou despercebido.
Se puderem me dar aquela ajuda, agradeço.
Erro retornado pelo console:
Caused by: java.lang.NullPointerException
at com.escolhacerta.model.CategoriaDAO.listarCategoria(CategoriaDAO.java:43)
at com.escolhacerta.managedBeans.ProdutoManagedBean.getCategorias(ProdutoManagedBean.java:44)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at javax.el.BeanELResolver.getValue(BeanELResolver.java:241)
at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
at com.sun.el.parser.AstValue.getValue(AstValue.java:139)
at com.sun.el.parser.AstValue.getValue(AstValue.java:203)
at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:226)
at com.sun.faces.facelets.el.ELText$ELTextVariable.toString(ELText.java:228)
at com.sun.faces.facelets.el.ELText$ELTextComposite.toString(ELText.java:161)
at com.sun.faces.facelets.compiler.CommentInstruction.write(CommentInstruction.java:77)
at com.sun.faces.facelets.compiler.UIInstructions.encodeBegin(UIInstructions.java:82)
at com.sun.faces.facelets.compiler.UILeaf.encodeAll(UILeaf.java:183)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:458)
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:134)
at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:337)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:659)
… 42 more
ConnectionFactory:
package com.escolhacerta.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConnectionFactory {
public Connection getConnection() throws ClassNotFoundException {
// o erro está aqui. (classnotfound, causa um nullpointerexception
Class.forName(“com.mysql.jdbc.Driver”);
try{
return DriverManager.getConnection(
//ip/porta/nomedobanco
//“jdbc:mysql://localhost:3306/escolhacertaBD?useTimezone=true&serverTimezone=UTC”
“jdbc:mysql://localhost:3306/escolhacertaBD”
,“root”
,“root”
);
} catch(SQLException excecao) {
throw new RuntimeException(excecao);
}
}
DAO que me retorna a Exception:
package com.escolhacerta.model;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import com.escolhacerta.control.Categoria;
import com.escolhacerta.util.ConnectionFactory;
public class CategoriaDAO {
private Connection conn;
//private String categorias;
private List categorias = new ArrayList();
private Categoria c = new Categoria();
public CategoriaDAO() {
try{
this.conn = new ConnectionFactory().getConnection();
}catch(ClassNotFoundException cn){
System.out.println(cn);
}
}
public boolean addCategoria(){
try{
PreparedStatement stmt = conn
.prepareStatement("insert into categoria (nmCategoria) values (?)");
stmt.setString(1, c.getCategoria());
return true;
}catch(SQLException ex){
throw new RuntimeException(ex);
}
}
public List<String> listarCategoria() throws SQLException{
String ctg = "SELECT * FROM categoria;";
PreparedStatement ps = conn.prepareStatement(ctg);
//Executa o comando de consulta aonde guarda os dados retornados dentro do ResultSet.
ResultSet rs = ps.executeQuery();
//Faz a verificação enquanto houverem registros, percorre e resgata os valores
while(rs.next()){
Categoria c = new Categoria();
//c.setCategoria(rs.getString(1));
c.setCategoria(rs.getString("nmCategoria"));
categorias.add(c.getCategoria().toString());
}
ps.execute();
rs.close();
ps.close();
return categorias;
}
}
Trecho da página onde fiz a ligação do ManagedbBean:
<!-- Menu de categorias -->
<div class="d-none d-sm-block">
<div class="fluid-continer">
<ul>
<ui:repeat var="categoria" value="#{produtoManagedBean.categorias}">
<li class="inline-items d-inline line-height: 1;">
| Produto 1
<h:dataTable value="#{produtoManagedBean.categorias}" var="categoria">
<h:column>
#{categoria.categoria}
</h:column>
</h:dataTable>
</li>
<div class="btn-group">
<h:form id="categoria">
<h:commandButton value="Mais Categorias"
styleClass="btn dropdown-toggle"
jsf:data-toggle="dropdown"
jsf:aria-haspopup="true"
jsf:aria-expanded="false"
/>
<ul class="dropdown-menu dropdown-menu-right">
<li>
<h:commandLink value="#{produtoManagedBean.categorias}"
action="index_jsf"
styleClass="dropdown-item"
/>
</li>
</ul>
</h:form>
</div>
</ui:repeat>
</ul>
</div>
</div>