Ajuda urgente (resultset + tabela html)

8 respostas
J

Boa Tarde Java Peoples
Seguinte:

Estou desenvolvendo um sistema web e estou com o seguinte problema,
o usuário insere um nome para pesquisa e quando o banco devolve o resultset esta dando erro nesse jsp que montei para receber os dados segue código abaixo ... por favor que conseguir encontrar o erro ou uma solução postem ai ... não consigo encontrar onde estou errando !!!

Recebo um NUllPointerException

<table width="590" border="1">
<tr>
<td align="center" width="10">Visualisar</td>
<td align="left">Nome</td>
<td align="center" width="10">Quadra</td> 
<td align="center" width="10">Bloco</td> 
<td align="center" width="10">Apto</td> 
</tr>
</table>
<tr><td>
<table width="590" border="1">

<%
	String pChave = request.getParameter("pChave");
	try{
		Cliente cli = new Cliente();
		ResultSet rs = cli.consultaNome(pChave);
		while(rs.next()){
			out.println("<tr><td><a href=dadosCliente.jsp?linkID="+ rs.getInt("idCli")+"></a></td>");
			out.println("<td>"+ rs.getString("nome")+"</td>");
			out.println("<td>"+ rs.getString("quadra")+"</td>"); 
			out.println("<td>"+ rs.getString("bloco")+"</td>"); 
			out.println("<td>"+ rs.getString("apto")+"</td></tr>");
		}
	
	}catch(SQLException ex){
		ex.printStackTrace();
	}
%>		
</table>

APARECE O SEGUINTE ERRO:

type Exception report

message 

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

exception 

org.apache.jasper.JasperException: Exception in JSP: /resultNome.jsp:36

33: 	try{
34: 		Cliente cli = new Cliente();
35: 		ResultSet rs = cli.consultaNome(pChave);
36: 		while(rs.next()){
37: 			out.println("<tr><td><a href=dadosCliente.jsp?linkID="+ rs.getInt("idCli")+"></a></td>");
38: 			out.println("<td>"+ rs.getString("nome")+"</td>");
39: 			out.println("<td>"+ rs.getString("quadra")+"</td>"); 


Stacktrace:
	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:451)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


root cause 

java.lang.NullPointerException
	org.apache.jsp.resultNome_jsp._jspService(resultNome_jsp.java:79)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


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

PESSOAL, PRECISO DE UMA SOLUÇÃO PARA ISSO OU QUEM SABE UM CÓDIGO MAIS SIMPLES PARA RODAR ESSA CONSULTA DO BANCO.

A CLASSE DE CONEXÃO COM O BANCO E O MÉTODO DE CONSULTA ESTÃO FUNCIONANDO POIS TESTEI OS DOIS FORA DESSE JSP.

GRATO A QUEM PUDER AJUDAR

[ ]'S

8 Respostas

AndreAlves

Cara, aparentemente o comando abaixo tá retornando null:

cli.consultaNome(pChave);

Posta aí o código da classe Cliente.

fabbio_2k

Se a consulta esta normal no seu java e ela retornar alguma coisa . Logo o erro é no jsp
provavelmente pChave não está sendo setada
pois o erro é de alguma váriável que está null e vc esta tentando ultilizá-la

solução : tente mostrar na sua IDE o valor de pChave.

J

Vai em seguencia o que acontece antes de chegar no problema do JSP

CLASSE DE CONEXÃO COM O BANCO

public class BaseDados {
		
	private Connection conn = null;
	private String erro;
	
	public Connection Conectar()throws SQLException, ClassNotFoundException,Exception{
			
		try{
			Class.forName("com.mysql.jdbc.Driver");	
			String url = "jdbc:mysql://localhost:3306/jotaplus";
			conn = DriverManager.getConnection(url,"root","root");
			return conn;
			
		}catch(ClassNotFoundException cnfe){
			erro = "Driver não Encontrado";
			throw new ClassNotFoundException(erro);
						
		}catch(SQLException sqle){
			erro = "Não foi possivel conectar ao Banco";
			throw new SQLException(erro);
			
		}catch(Exception e){
			erro = "Ocorreu um erro";
			throw new Exception(erro);
		}
	}

	public void Desconectar(Connection conexao)throws SQLException,Exception{
		try{
			if(conexao != null){
				conexao.close();
			}
		}catch(SQLException sqle){
			erro = "Não foi possivel conectar ao Banco";
			throw new SQLException(erro);
			
		}catch(Exception e){
			erro = "Ocorreu um erro";
			throw new Exception(erro);
		}
	}

}

CLASSE COM O MÉTODO

public class Cliente {
	
	private String query;
	private String erro;
	private BaseDados banco = new BaseDados();
	private Connection conn = null;
	private PreparedStatement ps = null;
	private ResultSet rs = null;

  public ResultSet consultaNome(String pChave)throws SQLException,Exception{
		
		//Retorna pesquisas de clientes por nome
		query = "select idCli, nome,quadra,bloco,apto from cliente where nome like '%" + pChave + "%' order by nome";
			try{
				conn = banco.Conectar();
				ps = conn.prepareStatement(query);
				ps.execute(query);
				return(rs);
				
			}catch(SQLException sql){
				erro = "Ocorreu um erro - MySQL";
				sql.printStackTrace();
				throw new SQLException(erro);
				
			}catch(Exception ex){
				erro = "Ocorreu um erro";
				ex.printStackTrace();
				throw new Exception(erro);
			}	
		}

JSP COM UM FORM SIMPLES SÓ PRA MANDAR UM PARAMETRO PARA TESTAR A CONSULTA (SÓ A TABELA)

<table width="590" border="1" align="left">
<tr><td align="center" height="40">
Consulta de Clientes
</td></tr>
<tr>
<form action="resultNome.jsp" METHOD="POST">
<td height="35">Nome = <input type="text" name="pChave" width="100" align="left">
<input type="submit" value="Procurar" id="listagem"/></td></form></tr>
</table>
JSP COM O PROBLEMA ( APENAS A PARTE DA TABELA QUE NÃO RETORNOU O RESULTADO)
<table width="590" border="1">

<%
	String pChave = request.getParameter("pChave");
	try{
		Cliente cli = new Cliente();
		ResultSet rs = cli.consultaNome(pChave);
		while(rs.next()){
			out.println("<tr><td><a href=dadosCliente.jsp?linkID="+ rs.getInt("idCli")+"></a></td>");
			out.println("<td>"+ rs.getInt("nome")+"</td>");
			out.println("<td>"+ rs.getString("quadra")+"</td>"); 
			out.println("<td>"+ rs.getString("bloco")+"</td>"); 
			out.println("<td>"+ rs.getString("apto")+"</td></tr>");
		}
	}catch(SQLException ex){
		ex.printStackTrace();
}
%>		
</table>

TAI TODO O PERCURSO DO CÓDIGO ???

OBRIGADOOOO !!!!

fabbio_2k

Testa esse código : ah as tuas classes do jeito que estão ,me parecem que estão no mesmo pacote num é isso ?
pois se tiverem em pacotes diferentes, vc esqueceu de importá-los ,ai vai dá erro mesmo.

public class TestCliente {
	  public static void main(String[] args) {  
		   
		    Cliente cli = new Cliente(); 
		    //coloca qualquer nome,desde que vc tenha certeza que tenha no banco
		    ResultSet rs = cli.consultaNome("nomeQualquer"); 
		    //aqui é só pra fazer um teste se ele retornar alguma coisa diferente de null
		    System.out.println("Resultado : " + rs.toString());
		    // se retornar null,o seu sql de pesquisa está com algum problema
		    //se retornar diferente de null,então é o seu jsp que tem algum problema
		    // tipo sua variável nã oestá sendo passada pelo relatório.
		   
	     }  
	  
	  
		 
}
J

Vou testar depois posto se deu certo e ta todo mundo no mesmo pacote

gigicantador

Você não está tratando o caso de a busca não retornar nada… No jsp mesmo coloca um "if (!resultset == null) que é para funcionar.

Agora… Chamar um método que acessa o banco direto do JSP não é bom para sua performance… Tenta fazer isso em classes java e utilize a sessão para passar o resultado… :wink:

J

Resolvido
Valewwwwwwwwwwww GIGI fiz um teste para ver se o valor retornava nulo e estava acontecendo porque tinha um erro de compilação na seguinte linha do JSP, na saida de dados eu retornava um Inteiro quando o resultado era uma String … ai estava o problema da questão.

out.println("<td>"+ rs.getInt("nome")+"</td>");

Obrigado pela ajuda galera.

Grande abraço

J

Encontrei um erro fatal .. não é a toa q só chegava NullPointerException e o valor chegava nulo o resultset estava vindo nulo de verdade.
No código eu retornava o ResultSet mas sem o select do banco.

public ResultSet consultaNome(String pChave)throws SQLException,Exception{  
           
         //Retorna pesquisas de clientes por nome  
         query = "select idCli, nome,quadra,bloco,apto from cliente where nome like '%" + pChave + "%' order by nome";  
             try{  
                 conn = banco.Conectar();  
                 ps = conn.prepareStatement(query);  
                 ps.execute(query);  
                return(rs);  
                   
             }catch(SQLException sql){  
                 erro = "Ocorreu um erro - MySQL";  
                 sql.printStackTrace();  
                 throw new SQLException(erro);  
                   
             }catch(Exception ex){  
                 erro = "Ocorreu um erro";  
                 ex.printStackTrace();  
                 throw new Exception(erro);  
             }     
         }
Criado 25 de abril de 2009
Ultima resposta 6 de mai. de 2009
Respostas 8
Participantes 4