Abstração total

Boa noite, senhoras e senhores. Eu criei um monstro!

Bem tentando fazer uma aplicação o máximo possível orientada a objetos, eu criei a seguinte classe:

[code]package org.sisavalcand.negocio;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Collection;
import java.util.List;
import java.util.Vector;

import org.sisavalcand.comum.ConectaFB;

public class EntitiesFacade {

public void inseriAvalicao(AvaliacaoBean avaliacao){
	try{
		Connection con = ConectaFB.getConexao();
		PreparedStatement psmt = con.prepareStatement(
				"INSERT INTO AVALIACAO (ID, DATA, NQUESTOES, PONTUACAO, SELECAO, CANDIDATO) VALUES (?,?,?,?,?,?)");
		psmt.setInt(1, avaliacao.getId());
		psmt.setDate(2, new Date(avaliacao.getData().getTime()));
		psmt.setInt(3, avaliacao.getNQuestoes());
		psmt.setDouble(4, avaliacao.getPontuacao());
		psmt.setInt(5, avaliacao.getSelecao().getId());
		psmt.setInt(6, avaliacao.getCandidato().getId());
		psmt.executeUpdate();
		psmt.close();
		con.close();
	} catch (Exception e) {
		e.printStackTrace();
		System.err.println("Falha ao incluir avaliacao!");
	}
}

public AvaliacaoBean selecionaAvaliacao(int id){
	AvaliacaoBean avaliacao = new AvaliacaoBean();
	try{
		Connection con = ConectaFB.getConexao();
		Statement smt = con.createStatement();
		ResultSet rs = smt.executeQuery("SELECT ID, DATA, NQUESTOES, PONTUACAO, SELECAO, CANDIDATO FROM AVALIACAO WHERE ID = " + id);
		while(rs.next()){
			avaliacao.setId(rs.getInt("ID"));
			avaliacao.setData(rs.getDate("DATA"));
			avaliacao.setNQuestoes(rs.getInt("NQUESTOES"));
			avaliacao.setPontuacao(rs.getDouble("PONTUACAO"));
			avaliacao.setSelecao(selecionaSelecao(rs.getInt("SELECAO")));
			avaliacao.setQuestoes(listaQuestoes(rs.getInt("ID")));
		}	
		smt.close();
		con.close();
	} catch (Exception e) {
		e.printStackTrace();
		System.err.println("Falha ao selecionar avaliacao!");
	}
	return avaliacao;
}

public Collection listaAvaliacoes(String origem, int id){
    ResultSet rs;
    int pos = 0;
    List lista = new Vector();
	try{
		Connection con = ConectaFB.getConexao();
		Statement smt = con.createStatement();
		if(origem.equals(null)){
		    rs = smt.executeQuery(
		        "SELECT ID, DATA, NQUESTOES, PONTUACAO, SELECAO, CANDIDATO FROM AVALIACAO ORDER BY DATA");
		} else if (origem.equals("SELECAO")){
		    rs = smt.executeQuery(
			     "SELECT ID, DATA, NQUESTOES, PONTUACAO, SELECAO, CANDIDATO FROM AVALIACAO WHERE SELECAO = " + id + " ORDER BY DATA");
		} else if (origem.equals("CANDIDATO")){
		    rs = smt.executeQuery(
			     "SELECT ID, DATA, NQUESTOES, PONTUACAO, SELECAO, CANDIDATO FROM AVALIACAO WHERE CANDIDATO = " + id + " ORDER BY DATA");
		}  else {
		    rs = smt.executeQuery(
			     "SELECT ID, DATA, NQUESTOES, PONTUACAO, SELECAO FROM AVALIACAO ORDER BY DATA");
		} 
		
		while(rs.next()){
		    AvaliacaoBean avaliacao = new AvaliacaoBean();
		    avaliacao.setId(rs.getInt("ID"));
			avaliacao.setData(rs.getDate("DATA"));
			avaliacao.setNQuestoes(rs.getInt("NQUESTOES"));
			avaliacao.setPontuacao(rs.getDouble("PONTUACAO"));
			avaliacao.setSelecao(selecionaSelecao(rs.getInt("SELECAO")));
			avaliacao.setQuestoes(listaQuestoes(rs.getInt("ID")));
			lista.set(pos, avaliacao);
			pos++;
		}
		smt.close();
		con.close();
	} catch (Exception e) {
		e.printStackTrace();
		System.err.println("Falha ao listar avaliacoes!");
	}
	return lista;
}

public void inseriAvaliador(AvaliadorBean avaliador){
	try{
		Connection con = ConectaFB.getConexao();
		PreparedStatement psmt = con.prepareStatement(
				"INSERT INTO AVALIADOR (ID, NOME, APELIDO, SENHA, EMAIL ) VALUES (?,?,?,?,?)");
		psmt.setInt(1, avaliador.getId());
		psmt.setString(2, avaliador.getNome());
		psmt.setString(3, avaliador.getApelido());
		psmt.setString(4, avaliador.getSenha());
		psmt.setString(5, avaliador.getEmail());
		psmt.executeUpdate();
		psmt.close();
		con.close();
	} catch (Exception e) {
		e.printStackTrace();
		System.err.println("Falha ao incluir avaliador!");
	}
}

public AvaliadorBean selecionaAvaliador(int id){
	AvaliadorBean avaliador = new AvaliadorBean();
	try{
		Connection con = ConectaFB.getConexao();
		Statement smt = con.createStatement();
		ResultSet rs = smt.executeQuery(
				"SELECT ID, NOME, APELIDO, SENHA, EMAIL FROM AVALIADOR WHERE ID = " + id);
		while(rs.next()){
			avaliador.setId(rs.getInt("ID"));
			avaliador.setNome(rs.getString("NOME"));
			avaliador.setApelido("APELIDO");
			avaliador.setSenha(rs.getString("SENHA"));
			avaliador.setEmail(rs.getString("EMAIL"));
			avaliador.setSelecoes(listaSelecoes(rs.getInt("ID")));
		}
		smt.close();
		con.close();
	} catch (Exception e) {
		e.printStackTrace();
		System.err.println("Falha ao selecionar avaliador!");
	}
	return avaliador;
}

public Collection listaAvaliadores(int id){
	int pos = 0; 
    List lista = new Vector();
	try{
		Connection con = ConectaFB.getConexao();
		Statement smt = con.createStatement();
		ResultSet rs = smt.executeQuery("SELECT ID, NOME, APELIDO, SENHA, EMAIL FROM AVALIADOR ORDER BY NOME");
		while(rs.next()){
		    AvaliadorBean avaliador = new AvaliadorBean();
		    avaliador.setId(rs.getInt("ID"));
			avaliador.setNome(rs.getString("NOME"));
			avaliador.setApelido("APELIDO");
			avaliador.setSenha(rs.getString("SENHA"));
			avaliador.setEmail(rs.getString("EMAIL"));
			avaliador.setSelecoes(listaSelecoes(rs.getInt("ID")));
			lista.set(pos , avaliador);
			pos++;
		}
		smt.close();
		con.close();
	} catch (Exception e) {
		e.printStackTrace();
		System.err.println("Falha ao listar avaliadores!");
	}
	return lista;
}

public void inseriBoletim(BoletimBean boletim){
    try{
		Connection con = ConectaFB.getConexao();
		PreparedStatement psmt = con.prepareStatement(
				"INSERT INTO BOLETIM (ID, NOTA, CANDIDATO, AVALIACAO) VALUES (?,?,?,?)");
		psmt.setInt(1, boletim.getId());
		psmt.setDouble(2, boletim.getNota());
		psmt.setInt(3, boletim.getCandidato().getId());
		psmt.setInt(4, boletim.getAvaliacao().getId());
		psmt.executeUpdate();
		psmt.close();
		con.close();
	} catch (Exception e) {
		e.printStackTrace();
		System.err.println("Falha ao incluir boletim!");
	}
}

public BoletimBean selecionaBoletim(int id){
	BoletimBean boletim = new BoletimBean();
	try{
		Connection con = ConectaFB.getConexao();
		Statement smt = con.createStatement();
		ResultSet rs = smt.executeQuery(
		        "SELECT NSERT INTO BOLETIM (ID, NOTA, CANDIDATO, AVALIACAO FROM BOLETIM WHERE ID = " + id);
		while(rs.next()){
		    boletim.setId(rs.getInt("ID"));
		    boletim.setNota(rs.getDouble("NOTA"));
		    boletim.setCandidato(selecionaCandidato(rs.getInt("CANDIDATO")));
		    boletim.setAvaliacao(selecionaAvaliacao(rs.getInt("AVALIACAO")));
		}
		smt.close();
		con.close();
	} catch (Exception e) {
		e.printStackTrace();
		System.err.println("Falha ao selecionar boletim!");
	}
	return boletim;
}

public Collection listaBoletins(){
	int pos = 0; 
    List lista = new Vector();
	try{
		Connection con = ConectaFB.getConexao();
		Statement smt = con.createStatement();
		ResultSet rs = smt.executeQuery("SELECT ID, NOTA, CANDIDATO, AVALIACAO FROM BOLETIM ORDER BY CANDIDATO");
		while(rs.next()){
		    BoletimBean boletim = new BoletimBean();
		    boletim.setId(rs.getInt("ID"));
		    boletim.setNota(rs.getDouble("NOTA"));
		    boletim.setCandidato(selecionaCandidato(rs.getInt("CANDIDATO")));
		    boletim.setAvaliacao(selecionaAvaliacao(rs.getInt("AVALIACAO")));
		    lista.set(pos, boletim);
		    pos++;
		}
		smt.close();
		con.close();
	} catch (Exception e) {
		e.printStackTrace();
		System.err.println("Falha ao listar boletins!");
	}
	return lista;
}

public void inseriCandidato(CandidatoBean candidato){
	try{
		Connection con = ConectaFB.getConexao();
		PreparedStatement psmt = con.prepareStatement(
				"INSERT INTO CANDIDATO (ID, NOME, APELIDO, SENHA, EMAIL ) VALUES (?,?,?,?,?)");
		psmt.setInt(1, candidato.getId());
		psmt.setString(2, candidato.getNome());
		psmt.setString(3, candidato.getApelido());
		psmt.setString(4, candidato.getSenha());
		psmt.setString(5, candidato.getEmail());
		psmt.executeUpdate();
		psmt.close();
		con.close();
	} catch (Exception e) {
		e.printStackTrace();
		System.err.println("Falha ao incluir Candidato!");
	}
}

public CandidatoBean selecionaCandidato(int id){
	CandidatoBean candidato = new CandidatoBean();
	try{
		Connection con = ConectaFB.getConexao();
		Statement smt = con.createStatement();
		ResultSet rs = smt.executeQuery(
				"SELECT ID, NOME, APELIDO, SENHA, EMAIL FROM CANDIDATO WHERE ID = " + id);
		while(rs.next()){
			candidato.setId(rs.getInt("ID"));
			candidato.setNome(rs.getString("NOME"));
			candidato.setApelido("APELIDO");
			candidato.setSenha(rs.getString("SENHA"));
			candidato.setEmail(rs.getString("EMAIL"));
			candidato.setAvaliacoes(listaAvaliacoes("CANDIDATO",rs.getInt("ID")));
		}
		smt.close();
		con.close();
	} catch (Exception e) {
		e.printStackTrace();
		System.err.println("Falha ao selecionar candidato!");
	}
	return candidato;
}

public Collection listaCandidatos(){
	int pos = 0;
    List lista = new Vector();
	try{
		Connection con = ConectaFB.getConexao();
		Statement smt = con.createStatement();
		ResultSet rs = smt.executeQuery(
		        "SELECT ID, NOME, APELIDO, SENHA, EMAIL FROM CANDIDATO ORDER BY NOME");
		while(rs.next()){
		    CandidatoBean candidato = new CandidatoBean();
		    candidato.setId(rs.getInt("ID"));
			candidato.setNome(rs.getString("NOME"));
			candidato.setApelido("APELIDO");
			candidato.setSenha(rs.getString("SENHA"));
			candidato.setEmail(rs.getString("EMAIL"));
			candidato.setAvaliacoes(listaAvaliacoes("CANDIDATO", rs.getInt("ID")));
			lista.set(pos, candidato);
			pos++;
		}
		smt.close();
		con.close();
	} catch (Exception e) {
		e.printStackTrace();
		System.err.println("Falha ao listar candidatos!");
	}
	return lista;
}

public void inseriQuestao(QuestaoBean questao){
	try{
		Connection con = ConectaFB.getConexao();
		PreparedStatement psmt = con.prepareStatement(
				"INSERT INTO QUESTAO (ID, PERGUNTA, RESPOSTA, ALTERNATIVA_1, ALTERNATIVA_2, ALTERNATIVA_3, AVALIACAO) VALUES (?,?,?,?,?,?,?)");
		psmt.setInt(1, questao.getId());
		psmt.setString(2, questao.getPergunta());
		psmt.setString(3, questao.getResposta());
		psmt.setString(4, questao.getAlternativa_1());
		psmt.setString(5, questao.getAlternativa_2());
		psmt.setString(6, questao.getAlternativa_3());
		psmt.setInt(7, questao.getAvalicao().getId());
		psmt.executeUpdate();
		psmt.close();
		con.close();
	} catch (Exception e) {
		e.printStackTrace();
		System.err.println("Falha ao incluir questao!");
	}
}

public QuestaoBean selecionaQuestao(int id){
	QuestaoBean questao = new QuestaoBean();
	try{
		Connection con = ConectaFB.getConexao();
		Statement smt = con.createStatement();
		ResultSet rs = smt.executeQuery(
		        "SELECT ID, PERGUNTA, RESPOSTA, ALTERNATIVA_1, ALTERNATIVA_2, ALTERNATIVA_3, AVALIACAO FROM QUESTAO WHERE ID = " + id);
		while(rs.next()){
			questao.setId(rs.getInt("ID"));
			questao.setPergunta(rs.getString("PERGUNTA"));
			questao.setResposta(rs.getString("RESPOSTA"));
			questao.setAlternativa_1(rs.getString("ALTERNATIVA_1"));
			questao.setAlternativa_2(rs.getString("ALTERNATIVA_2"));
			questao.setAlternativa_3(rs.getString("ALTERNATIVA_3"));
			questao.setAvaliacao(selecionaAvaliacao(rs.getInt("AVALIACAO")));
		}
		smt.close();
		con.close();
	} catch (Exception e) {
		e.printStackTrace();
		System.err.println("Falha ao selecionar questao!");
	}
	return questao;
}

public Collection listaQuestoes(int id){
    int pos = 0;
    ResultSet rs;
	List lista = new Vector();
	try{
		Connection con = ConectaFB.getConexao();
		Statement smt = con.createStatement();
		if(id == 0){
		    rs = smt.executeQuery(
		        "SELECT ID, PERGUNTA, RESPOSTA, ALTERNATIVA_1, ALTERNATIVA_2, ALTERNATIVA_3, AVALIACAO FROM QUESTAO ORDER BY PERGUNTA");
		} else {
		    rs = smt.executeQuery(
	        "SELECT ID, PERGUNTA, RESPOSTA, ALTERNATIVA_1, ALTERNATIVA_2, ALTERNATIVA_3, AVALIACAO FROM QUESTAO WHERE AVALIACAO = " + id + " ORDER BY PERGUNTA");
		}
		while(rs.next()){
		    QuestaoBean questao = new QuestaoBean();
		    questao.setId(rs.getInt("ID"));
			questao.setPergunta(rs.getString("PERGUNTA"));
			questao.setResposta(rs.getString("RESPOSTA"));
			questao.setAlternativa_1(rs.getString("ALTERNATIVA_1"));
			questao.setAlternativa_2(rs.getString("ALTERNATIVA_2"));
			questao.setAlternativa_3(rs.getString("ALTERNATIVA_3"));
			questao.setAvaliacao(selecionaAvaliacao(rs.getInt("AVALIACAO")));
			lista.set(pos, questao);
			pos++;
		}
		smt.close();
		con.close();
	} catch (Exception e) {
		e.printStackTrace();
		System.err.println("Falha ao listar questoes!");
	}
	return lista;
}

public void inseriSelecao(SelecaoBean selecao){
	try{
		Connection con = ConectaFB.getConexao();
		PreparedStatement psmt = con.prepareStatement(
				"INSERT INTO SELECAO (ID, NOME, ASSUNTO, DATA_INICIO, DATA_TERMINO, AVALIADOR ) VALUES (?,?,?,?,?,?)");
		psmt.setInt(1, selecao.getId());
		psmt.setString(2, selecao.getNomeSelecao());
		psmt.setString(3, selecao.getAssunto());
		psmt.setDate(4, new Date(selecao.getDataInicio().getTime()));
		psmt.setDate(5, new Date(selecao.getDataTermino().getTime()));
		psmt.setInt(6, selecao.getAvaliador().getId());
		psmt.executeUpdate();
		psmt.close();
		con.close();
	} catch (Exception e) {
		e.printStackTrace();
		System.err.println("Falha ao incluir selecao!");
	}
}

public SelecaoBean selecionaSelecao(int id){
	SelecaoBean selecao = new SelecaoBean();
	try{
		Connection con = ConectaFB.getConexao();
		Statement smt = con.createStatement();
		ResultSet rs = smt.executeQuery(
		        "SELECT ID, NOME, ASSUNTO, DATA_INICIO, DATA_TERMINO, AVALIADOR FROM SELECAO WHERE ID = " + id);
		while(rs.next()){
			selecao.setId(rs.getInt("ID"));
			selecao.setNomeSelecao(rs.getString("NOME"));
			selecao.setAssunto(rs.getString("ASSUNTO"));
			selecao.setDataIncio(rs.getDate("DATA_INICIO"));
			selecao.setDataTermino(rs.getDate("DATA_TERMINO"));
			selecao.setAvaliador(selecionaAvaliador(rs.getInt("AVALIADOR")));
			selecao.setAvaliacoes(listaAvaliacoes("SELECAO",rs.getInt("ID")));
		}
		smt.close();
		con.close();
	} catch (Exception e) {
		e.printStackTrace();
		System.err.println("Falha ao selecionar selecao!");
	}
	return selecao;
}

public Collection listaSelecoes(int id){
	int pos = 0;
    List lista = new Vector();
	ResultSet rs;
	try{
		Connection con = ConectaFB.getConexao();
		Statement smt = con.createStatement();
		if(id == 0){
		    rs = smt.executeQuery(
	        	"SELECT ID, NOME, ASSUNTO, DATA_INICIO, DATA_TERMINO, AVALIADOR FROM SELECAO ORDER BY ASSUNTO");
		} else {
		    rs = smt.executeQuery(
		        "SELECT ID, NOME, ASSUNTO, DATA_INICIO, DATA_TERMINO, AVALIADOR FROM SELECAO WHERE AVALIADOR = " + id + "ORDER BY DATA_TERMINO");
		}
		while(rs.next()){
			SelecaoBean selecao = new SelecaoBean();
			selecao.setId(rs.getInt("ID"));
			selecao.setNomeSelecao(rs.getString("NOME"));
			selecao.setAssunto(rs.getString("ASSUNTO"));
			selecao.setDataIncio(rs.getDate("DATA_INICIO"));
			selecao.setDataTermino(rs.getDate("DATA_TERMINO"));
			selecao.setAvaliador(selecionaAvaliador(rs.getInt("AVALIADOR")));
			selecao.setAvaliacoes(listaAvaliacoes("SELECAO", rs.getInt("ID")));
			lista.set(pos, selecao);
			pos++;
		}
		smt.close();
		con.close();
	} catch (Exception e) {
		e.printStackTrace();
		System.err.println("Falha ao listar selecoes!");
	}
	return lista;
}

public void apagaRegistro(String tabela, int id){
	try{
		Connection con = ConectaFB.getConexao();
		Statement smt = con.createStatement();
		smt.executeUpdate("DELETE FROM " + tabela + " WHERE SINTAXE = " + id);
		smt.close();
		con.close();
	} catch (Exception e) {
		e.printStackTrace();
		System.err.println("Falha ao apagar o registro nº " + id + " da tabela " + tabela);
	}
}

}
[/code]

:?: :arrow: Agora não sei se essa foi a melhor implementação, pois tenho um caso de pesquisa para autenticacao nas mãos e não consigo retorno depois da seguinte linha de um servlet:

Usuario usuario = selecionaCandidato(id);

claro que, esta linha está dentro de um laço que incrementa o id até que seja encontrado o nome e senha correspondente na tabela, assim setando uma variável boolena “achou” como true.

Agradeço muito se alguém puder dar um a :idea: .

Francisco

Olha eu aqui de novo. Realmente criei um monstro.

Tentando debugar esta aplicação deparei-me com o seguinte erro

E agora alguém tem alguma idéia de como reformular está classe.
Agradeço muito. Queria terminar este projeto este ano. :cry: :cry:

Flw, galera.