Pau ao recuperar registros do BD usando servlet! AJUDEM!

Por favor me ajudem pessoal, preciso disso rodando 100%, só que ja nao aguento mais procurar o erro e não achar nada :frowning:

Pessoal, estou fazendo um curso de java e agora começamos a criar servlets. Usamos como server o JBoss.

Criei um projeto chamado AulaWeb, daí entro no navegador (http://localhost:8080/AulaWeb/), para ver os formularios.

Existem dois formularios, um para inserir, e outro para pesquisar.

Estou com dois problemas até então.

Ao inserir um registro, cadastro de alunos com quatro atributos, ele insere direitinho… porém quando visualizamos no BD percebemos que ele criou um registro correto e uns 5 em branco;

Quando tento pesquisar por nome, não consegue buscar nada;

Acho que configurei o JBoss corretamente, assim como o BD (Postgresql)

Minha tabela no sql é a seguinte:

CREATE TABLE aluno
(
codigo bigserial NOT NULL,
nome character varying(100),
fone character varying(10),
endereco character varying(200),
sexo character varying(1),
CONSTRAINT aluno_pkey PRIMARY KEY (codigo)
)
WITHOUT OIDS;
ALTER TABLE aluno OWNER TO “PROPRIETARIO”;

o código fonte do servlet é:

package br.eib.com.teste;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import br.eib.com.db.Conexao;

/**

  • Servlet implementation class for Servlet: TbAlunoTeste

*/
public class TbAlunoTeste extends javax.servlet.http.HttpServlet implements
javax.servlet.Servlet {

public TbAlunoTeste() {
	super();
}

protected void doGet(HttpServletRequest request,
		HttpServletResponse response) throws ServletException, IOException {
	String nome = request.getParameter("txNome");
	
	String Nome = request.getParameter("tfNome");
	String Fone = request.getParameter("tfFone");
	String Endereco = request.getParameter("tfEndereco");
	
	InserirAluno(response, Nome, Fone, Endereco);
	
	listarAlunoUm(response, Nome);
	//listarAlunoTodos(response);
}

protected void doPost(HttpServletRequest request,
		HttpServletResponse response) throws ServletException, IOException {

}

private void InserirAluno(HttpServletResponse response, String sNome, String sFone, String sEndereco){
	String sql = "insert into aluno (nome, fone, endereco) values (?,?,?)";
	Conexao conexao = new Conexao();
	PreparedStatement pStmt = null;		
	
	try{
		pStmt = conexao.getConexao().prepareStatement(sql);
		pStmt.setString(1, sNome);
		pStmt.setString(2, sFone);
		pStmt.setString(3, sEndereco);
		pStmt.executeUpdate();
	}catch (Exception e) {
		System.out.println(e.getMessage());
	}
}


private void listarAlunoTodos(HttpServletResponse response){
	String sql = "select * from aluno";
	Conexao conexao = new Conexao();
	PreparedStatement pStmt = null;
	ResultSet resultado = null;
	
	try{
		pStmt = conexao.getConexao().prepareStatement(sql);
		resultado = pStmt.executeQuery();
		
		PrintWriter escrever = response.getWriter(); 
		response.setContentType("text/html");
		escrever.println("<table width='700' border='1' cellpadding='0' cellspacing='0'>");
		escrever.println("  <tr>");
		escrever.println("    <td colspan='5'>CADASTRO DE USU&Aacute;RIO - RESULTADO </td>");
		escrever.println("  </tr>");
		escrever.println("  <tr>");
		escrever.println("<td width='89'>C&Oacute;DIGO</td>");
		escrever.println("<td width='215'>NOME</td>");
		escrever.println("<td width='110'>FONE</td>");
		escrever.println("<td width='210'>ENDERE&Ccedil;O</td>");
		escrever.println("</tr>");
		
		while(resultado.next()){				
			escrever.println("<tr>");
			escrever.println("<td>&nbsp;"+ resultado.getString("codigo") +"</td>");
			escrever.println("<td>&nbsp;"+ resultado.getString("nome") +"</td>");
			escrever.println("<td>&nbsp;"+ resultado.getString("fone") +"</td>");
			escrever.println("<td>&nbsp;"+ resultado.getString("endereco") +"</td>");
			escrever.println("</tr>");				
		}
		escrever.println("</table>");
		
	}catch (Exception e) {
		System.out.println(e.getMessage());
	}
}

private void listarAlunoUm(HttpServletResponse response, String nome){
	String sql = "select * from aluno where nome = ? ";
	Conexao conexao = new Conexao();
	PreparedStatement pStmt = null;
	ResultSet resultado = null;
	
	try{
		pStmt = conexao.getConexao().prepareStatement(sql);
		pStmt.setString(1, nome);
		
		resultado = pStmt.executeQuery();
		
		PrintWriter escrever = response.getWriter(); 
		response.setContentType("text/html");
		escrever.println("<table width='700' border='1' cellpadding='0' cellspacing='0'>");
		escrever.println("  <tr>");
		escrever.println("    <td colspan='5'>CADASTRO DE USU&Aacute;RIO - RESULTADO </td>");
		escrever.println("  </tr>");
		escrever.println("  <tr>");
		escrever.println("<td width='89'>C&Oacute;DIGO</td>");
		escrever.println("<td width='215'>NOME</td>");
		escrever.println("<td width='110'>FONE</td>");
		escrever.println("<td width='210'>ENDERE&Ccedil;O</td>");
		escrever.println("</tr>");
		
		while(resultado.next()){				
			escrever.println("<tr>");
			escrever.println("<td>&nbsp;"+ resultado.getString("codigo") +"</td>");
			escrever.println("<td>&nbsp;"+ resultado.getString("nome") +"</td>");
			escrever.println("<td>&nbsp;"+ resultado.getString("fone") +"</td>");
			escrever.println("<td>&nbsp;"+ resultado.getString("endereco") +"</td>");
			escrever.println("</tr>");				
		}
		escrever.println("</table>");
		
	}catch (Exception e) {
		System.out.println(e.getMessage());
	}
}

}

o código fonte da outra classe, TbAluno:

package br.eib.com.dados;

public class TbAluno {
private int codigo;
private String nome;
private String fone;
private String endereco;
private String sexo;

public TbAluno(int iCodigo, String sNome, String sFone, 
		String sEndereco, String sSexo){
	this.codigo = iCodigo;
	this.nome = sNome;
	this.fone = sFone;
	this.endereco = sEndereco;
	this.sexo = sSexo;
}

public TbAluno(){
	//
}

public int getCodigo() {
	return codigo;
}

public void setCodigo(int codigo) {
	this.codigo = codigo;
}

public String getEndereco() {
	return endereco;
}

public void setEndereco(String endereco) {
	this.endereco = endereco;
}

public String getFone() {
	return fone;
}

public void setFone(String fone) {
	this.fone = fone;
}

public String getNome() {
	return nome;
}

public void setNome(String nome) {
	this.nome = nome;
}

public String getSexo() {
	return sexo;
}

public void setSexo(String sexo) {
	this.sexo = sexo;
}

}

A classe da conexão:

package br.eib.com.db;

import java.sql.Connection;
import java.sql.SQLException;

import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

/**

  • Mais boas práticas: Não tenha vergonha de assinar a sua classe.
  • Outras pessoas podem precisar de sua ajuda para fazer manutenção no código
  • algum dia.
  • @author Franklin Samir(franklin@portaljava.com)

/
public class Conexao {
/
*

  • String para recuperar o objeto via JNDI;
    */
    private final static String JNDI_NAME = “java:PostgresDS”;

/**

  • InitialContext que irá recuperar o DataSource via JNDI.
    */
    private InitialContext contextoInicial = null;

/**

  • O Data Source vai ser o objeto responsável por recuperar, pegar, buscar, pedir,
  • solicitar, e outras mais, a conexao com
  • o banco de dados criada pelo JNDI.
    */
    private DataSource dataSource_Conexao_Com_O_Banco = null;

/**

  • Default constructor.

/
/

public Conexao() {
super();
try {
/**
* Instanciei a variavel contextoInicial com o valor do contexto inicial
*
contextoInicial = new InitialContext();
// dataSource_Conexao_Com_O_Banco = (DataSource) contextoInicial.lookup(JNDI_NAME);
dataSource_Conexao_Com_O_Banco = (DataSource) contextoInicial.lookup(“java:PostgresDS”);
} catch (NamingException e) {
//TODO: Use um sistema de log adequado
e.printStackTrace();
}
}
/
/
*

  • Retorna uma java.sql.Connection.
  • @return con
    */
    public Connection getConexao() {
    Connection con = null;
    try {
    if (dataSource_Conexao_Com_O_Banco == null || contextoInicial == null) {
    contextoInicial = new InitialContext();
    dataSource_Conexao_Com_O_Banco = (DataSource) contextoInicial.lookup(JNDI_NAME);
    }
    con = dataSource_Conexao_Com_O_Banco.getConnection();
} catch (NamingException e) {
  //TODO: Use um sistema de log adequado
  e.printStackTrace();
} catch (SQLException e) {
  //TODO: Use um sistema de log adequado
  e.printStackTrace();
}
return con;

}

}

Qual desses dois parametros fazem referencia ao seu formulario?

 String nome = request.getParameter("txNome");

String Nome = request.getParameter("tfNome"); 

Nossa que bizarrisss :shock: :shock: :shock:

Velho qual é o conceito principal da O.O ?
Vc dividir as tarefas,
seu servlet nao pode ser responsavel pelo insert no banco de dados.
divida isso, uma classe RegistroAlunoDAO q faz a persistencia, RegistroAlunoServlet que obtem os dados do form, e ultiliza a classe para inserir o registro, talvez outra para chamar registros.

Mas lembrese de ultilizar corretamente os Beans para encapsular corretamente seus dados, afinal você nao quer q eles caiam em maos erradas ne! :slight_smile:

Seu erro ta ai cara, procura separar as coisas e fazer a classe de persistencia fazer corretamente o CRUD e vera que servlets nao tem misterios.

Att, 8)