Java.lang.NullPointerException[resolvido]

10 respostas
aszarael

Boa Tarde Pessoal,

Estou desenvolvendo um servlet simples para apresentar o resultado de uma consulta no banco.

tenho as Seguintes Classes

Classe de Conexão

package database;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;

public class conexao {
	
	private static Connection ObterConexao() {
		
		Connection conexao = null;   
	    try {   
	        // Load the JDBC driver   
	        String driverName = "oracle.jdbc.driver.OracleDriver";   
	        Class.forName(driverName);   
	       
	        // Create a connection to the database   
	        String serverName = "ip";   
	        String portNumber = "1521";   
	        String sid = "base";   
	        String url = "jdbc: oracle:thin:@" + serverName + ":" + portNumber + ":" + sid;   
	        String username = "usuario";   
	        String password = "senha";   
	        conexao = DriverManager.getConnection(url, username, password);   
	    } catch (ClassNotFoundException e) {   
	        // Could not find the database driver   
	    } catch (SQLException e) {   
	        // Could not connect to the database   
	    }  
        return conexao;
	}
	
	public ResultSet getRegistro(String pTabela,String pOrdena, String pSentido){

		ResultSet  rs 	= null;
		Statement stmt  = null;
		String     sql 	= null;
		
		sql = "select * from " + pTabela+ " order by "+pOrdena+" "+pSentido;
		try {
			rs = executeConsulta(sql);
			return rs;
		} catch (SQLException e) {
			System.out.println("Ocorreu erro ao executar sql!");
			e.printStackTrace();
		}
		return rs;
	}	
	
	public ResultSet executeConsulta(String sql) throws SQLException { 
		  Connection conn = null;
		  conn = ObterConexao();
	      Statement st = conn.createStatement();   
	      return st.executeQuery(sql);   
	   }  


}

Servlet

package servlet;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import database.conexao;

public class resumo extends HttpServlet{

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			 throws IOException,ServletException{
		
		response.setContentType("text/html");
		
		PrintWriter escreve = response.getWriter();
		
		escreve.println("<html>");
		escreve.println("<head>");
		escreve.println("<title>Detalhamento do processos tabela " +"REB_PROCESSOS2"+"</title>");
		escreve.println("<body>");  
		
		
		escreve.println("<table width="+"75%"+" border="+"1"+">");
		conexao connect = new conexao();
		ResultSet consulta = connect.getRegistro("REB_PROCESSOS2","CODIGO","ASC");
		
		try{			
			   while(consulta.next()){
				   escreve.println("<tr>");
				   escreve.println("<td>"+consulta.getString("CODIGO")+"</td>");
				   escreve.println("<td>"+consulta.getString("DESCRICAO")+"</td>");
				   escreve.println("</tr>");
			   }
			   consulta.close();
		}
		catch(SQLException e){
	      escreve.println("Ocorreu erro ao executar sql!");
		}

		escreve.println("</table>");		
		escreve.println("</body>");  
		escreve.println("</head>");
		escreve.println("</html>");		

	}
}

html

<html>
 <head>
  <title>2012</title>
  <body>
   <a href="resumo">Processos do Rebate</a>
  </body>
 </head>
</html>

Pelo que vi o problema e na minha classe de conexão
neste momento :

Statement st = conn.createStatement();

Só não consigui entender o que e necessario fazer para corrigir.

10 Respostas

Rodrigo_Sasaki

Cadê a stacktrace?

aszarael

Segue

type Exception report

message 

description The server encountered an internal error that prevented it from fulfilling this request.

exception 

java.lang.NullPointerException
	database.conexao.executeConsulta(conexao.java:56)
	database.conexao.getRegistro(conexao.java:43)
	servlet.resumo.doGet(resumo.java:30)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:722)


note The full stack trace of the root cause is available in the Apache Tomcat/7.0.30 logs.
Rodrigo_Sasaki

NullPointerException é uma das exceções mais fáceis de se identificar em casos normais.

no seu caso é simples: na linha 56 da classe Conexao.java você está tentando acessar algum objeto que está com a referência nula.

você já identificou a linha que está dando o problema, então a única explicação é que o método ObterConexao está retornando null.

analise o método DriverManager.getConnection, veja se ele está sendo executado como você quer, e veja o que ele retorna.

asousaj

Seu metodo ObterConexao() deve estar retornando null.
Substitua e confira no console:

} catch (ClassNotFoundException e) {     
	System.out.println(e);     
} catch (SQLException e) {     
	System.out.println(e); 
} catch (Exception e) {
	System.out.println(e); 
}
aszarael

Realmente o erro esta que não está sendo encontrado o JDBC

java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver Set 18, 2012 3:21:08 PM org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service() for servlet [resumo] in context with path [/Rebate] threw exception java.lang.NullPointerException at database.conexao.executeConsulta(conexao.java:59) at database.conexao.getRegistro(conexao.java:46) at servlet.resumo.doGet(resumo.java:30) at javax.servlet.http.HttpServlet.service(HttpServlet.java:621) at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source)

Porem ele está adicionado ao eclipse, alguma ideia ?

asousaj

Qual JAR está usando? Tente substitui-lo por um novo.

É Projeto web?

aszarael

Sim e um projeto web.
Já substitui mais continua com o mesmo problema.
estou usando a do oracle 11.

asousaj

Coloque ele(JAR) na pasta “WEB-INF/lib” e teste novamente.

aszarael

Agora apresenta este erro

java.sql.SQLException: No suitable driver found for jdbc:

aszarael

Resolvido galera, após adicionar a lib, vi que a string estava errada e deu tudo certo.

Valeu Pessoal pela força.

Criado 18 de setembro de 2012
Ultima resposta 18 de set. de 2012
Respostas 10
Participantes 3