Pagina não consegue exibir resultado de consultas do BD

0 respostas
N

Olá pessoal, estou desenvolvendo uma pequena aplicação Web, aparentemente não tive muitos problemas em configurar um pool de conexões, e a conexão com o banco de dados não apresenta nenhum erro aparente (pelo menos o programa não retorna nada que diga que está errado), então acredito ter um erro semântico em minha aplicação.
Eu preciso fazer uma simples consultada em um banco de dado e exibir numa JSP. Isso não deveria apresentar grande dificuldade pois acredito que deve ser uma atividade corriqueira pra quem desenvolve aplicações Web.
Ai vai o código pra ajudar:

Do JSP

<?xml version="1.0"?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"
   xmlns:c="http://java.sun.com/jsp/jstl/core"
   version="2.0">
<jsp:directive.page isELIgnored="false" />
<jsp:directive.page contentType="text/html"/>
<jsp:output omit-xml-declaration="false"
 doctype-root-element="html"
 doctype-public="-//W3C//DTD XHTML 1.1//EN"
 doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" />

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
 <title>Usuarios</title>
</head>
 <body>
  <p>Lista de usuarios</p>
  <table>
   <tr>
    <th>ID</th>
   </tr>    

   <jsp:useBean id="colecaoUsuario" class="com.teste.beans.colecaoUsuario"/>
   <c:forEach var="usuario" items="${colecaoUsuario.usuario}">
    <tr>
     <td><c:out value="${usuario.id}"/></td>
    </tr>
   </c:forEach>
  </table>
 </body>
 </html>
</jsp:root>

Da Classe colecaoUsuario (Bean):

package com.teste.beans;

import java.util.*;
import com.teste.model.ModelFacade;
import com.teste.model.Usuario;
import java.io.Serializable;

public class colecaoUsuario implements Serializable{
 private String clausula = new String();

 public String getClausula()
 {
  return clausula;
 }

    public void setClausula(String clausula) {
        this.clausula = clausula;
    }

 public Collection<Usuario> getUsuario()
 {
  Collection<Usuario> lista = ModelFacade.getUsuario(clausula);
  return lista;
 }
}

Classe ModelFacade:

package com.teste.model;

import com.teste.dao.UsuarioDAO;
import java.util.Collection;

public class ModelFacade {

    public static Collection<Usuario> getUsuario(String clausula) {
        if (clausula == null) {
            clausula = new String();
        }
        UsuarioDAO pDao = new UsuarioDAO();
        Collection<Usuario> lista = pDao.carregaUsuario(clausula);
        return lista;
    }
}

Classe UsuarioDAO:

package com.teste.dao;

import com.teste.model.*;
import java.sql.*;
import java.util.*;
import javax.naming.*;
import javax.sql.*;
import javax.swing.JOptionPane;

public class UsuarioDAO {

    private Connection conexao = null;
    private Statement afirmacao = null;
    private PreparedStatement prepAfirmacao = null;
    private ResultSet resultados = null;
    private static final String nome_data_source = "java:comp/env/jdbc/Test";
    private static final String consulta = "INSERT INTO usuario (id) VALUES (?)";

    private void getConnection() {
        if (conexao == null) {
            Context contextoInicial;
            try {
                contextoInicial = new InitialContext();
                DataSource poll = (DataSource) contextoInicial.lookup(nome_data_source);
                conexao = poll.getConnection();
            } catch (NamingException erro) {
                erro.printStackTrace();
            } catch (SQLException erro) {
                JOptionPane.showMessageDialog(null, erro.toString(), nome_data_source, 1);
                erro.printStackTrace();
            }

        }
    }

    public void persisteUsuario(Usuario pessoa){

        try {
            getConnection();
            prepAfirmacao = conexao.prepareStatement(consulta);
            prepAfirmacao.setInt(1, pessoa.getId());
            prepAfirmacao.executeUpdate();
            prepAfirmacao.close();
            prepAfirmacao = null;
        } catch (SQLException erro) {
            erro.printStackTrace();
        }finally{
            limpa();
        }
        
        
    }
    
    public Collection<Usuario> carregaUsuario(String clausula){

        Collection<Usuario> lista = new ArrayList<Usuario>();
        
        try {
            
            getConnection();        
            Statement afirmacao_aux = conexao.createStatement();
            ResultSet resultado = afirmacao_aux.executeQuery("SELECT * FROM pessoa" + clausula);
            int id = 0;
            Usuario pessoa = null;

            while(resultado.next()){
                id = resultado.getInt("id");
                pessoa.setId(id);
                lista.add(pessoa);
            }

            resultado.close();
            resultado = null;
            afirmacao_aux.close();
            afirmacao_aux = null;
            conexao.close();
            conexao = null;


        } catch (SQLException erro) {
            erro.printStackTrace();
        }finally{
            limpa();
        }
        
        return lista;
        
    }

    private void limpa(){
        if(resultados != null){
            try {
                resultados.close();
            } catch (SQLException erro) {
                erro.printStackTrace();
            }

            resultados = null;
        }
        if(afirmacao != null){
            try {
                afirmacao.close();
            } catch (SQLException erro) {
                erro.printStackTrace();
            }

            afirmacao = null;
        }
        if(prepAfirmacao != null){
            try {
                prepAfirmacao.close();
            } catch (SQLException erro) {
                erro.printStackTrace();
            }

            prepAfirmacao = null;
        }
        if(conexao != null){
            try {
                conexao.close();
            } catch (SQLException erro) {
                erro.printStackTrace();
            }

            conexao = null;
        }
    }

}

Eu criei a base de dados na mão utilizando o MySQL, não sei se isso é relevante mais eu uso Linux (Fedora 12) e NetBeans como IDE (Mas tô tentando migrar pro Eclipse =]).
O que deu pra perceber é que ele se conecta a base se dados porque se eu mudo o nome da base de dados no arquivo context.xml pra uma inexistente ele me reporta um erro dizendo que não encontrou tal base de dados.
Gostaria de saber se é um erro aparente, aquelas coisas que principiantes erram, conheço java razoavelmente mais sou marinheiro de primeira viajem em aplicações Web. O modo como estou tratando o problema é uma maneira razoavelmente boa?
Se o problema já aconteceu com alguém ou mesmo quem saiba dar um palpite, porque os meus já acabaram, toda ajuda é muito bem vinda.
Obrigado.

Criado 7 de maio de 2010
Respostas 0
Participantes 1