public Categoria find(int codigo){
Categoria c = null;
try {
String sql = "SELECT * FROM categoria WHERE id = ?";
PreparedStatement ps = this.conn.prepareStatement(sql);
ps.setInt(1, codigo);
ResultSet rs = ps.executeQuery();
c = new Categoria();
c.setId(rs.getInt("id"));
c.setDescricao(rs.getString("nome"));
} catch (SQLException e) {
System.out.println("Erro ao Procurar Categoria");
e.printStackTrace();
c = null;
}
return c;
}
Esse metodo da classe CategoriaDao ta dando um erro,
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:857)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:565)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1509)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException[b]
at org.apache.jsp.produto_jsp._jspService(produto_jsp.java:82)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
… 24 more
eu olho e olho e não consigo encontrar uma solução.
quando instancio a classe CategoriaDao
ele faz a conexão numa conection factory que eu criei
seria um conection.
Eu ja testei em outros metodos e estão todos funcionando o erro vem desse metodo ai o find(int codigo);
public class Teste extends HttpServlet{
public void doGet(HttpServletRequest requet,
HttpServletResponse response) throws IOException, ServletException{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
Categoria cat = new CategoriaDao().find(1);
out.println("Categoria find");
out.println(cat.getId());
out.println(cat.getDescricao());
out.println(cat.isExcluido());
out.println("FInD termino e não possui erros");
cat = new Categoria();
cat.setId(0);
cat.setDescricao("PenDrive");
cat.setExcluido(false);
out.println("Categoria Inserida");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Observe que o seu DAO pode retornar null se ocorrer um erro. Isso é uma má prática de programação, pois além dele comer o erro, ele retorna algo como se nada tivesse acontecido. Para piorar esse algo é uma coisa inválida (null) que vai fazer alguma outra coisa dar pau mais a frente (provavelmente o NullPointerException que você tem).
Não permita que o seu DAO retorne null. Ao invés disso lance uma exceção de dentro do seu catch. Outra alternativa, não tão boa, mas melhor que retornar null, é deixar o seu método lançar SQLException.
EDIT. Pode ficar assim:public Categoria find(int codigo){
try {
String sql = "SELECT * FROM categoria WHERE id = ?";
PreparedStatement ps = this.conn.prepareStatement(sql);
ps.setInt(1, codigo);
ResultSet rs = ps.executeQuery();
Categoria c = new Categoria();
c.setId(rs.getInt("id"));
c.setDescricao(rs.getString("nome"));
return c;
} catch (SQLException e) {
System.out.println("Erro ao Procurar Categoria");
e.printStackTrace();
throw new MinhaRuntimeException(e);
}
}