Null Pointer Exception

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.

Qual o valor de “conn” quando você chega nessa linha de código?

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);

Cara, quando eu cliquei em responder o thingol falou a mesma coisa que eu ia falar hehe…

Pode ser que está null o conn…

e a variavel rs?
Fez um debbug disso ai?

TO ACHANDO MESMO É QUE O ERRO ESTA ACONTECENDO NA SUA JSP.

DEBUGA AI PRA VER, !!!

public CategoriaDao(){
conn = ConnectionFactory.getConnection();
}

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();
		}
		
		
		
	}

}

então com as outras classes com a ProdutoDao funciona tranquilo,
o problema e quando chega nesse metodo
que é identico ao do produtoDao

Eu não sei porque mais mudei o PrepareStatement para simples statement e funcionou

Será que tem alguma relação com o Jar ser 3.1.x

Isso é coisa no seu JSP, e não no Dao.

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); } }