Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

Boa tarde pessoal, estou tentando acessar meu Banco de Dados HSQLDB Servidor, para pegar dados e inseri-los numa JList, mas sempre que chega na parte em que o código tenta acessar o banco da o seguinte erro:

O código é este:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.ufal.ic.falibras.ihc.cadastro;

import br.ufal.ic.falibras.common.persistence.ErroBDException;
import br.ufal.ic.falibras.common.persistence.IBancoDeDadosFinal;
import java.util.List;
import javax.swing.JOptionPane;

/**
 *
 * @author Karlos
 */
public class CadastroPalavras extends javax.swing.JFrame {
    private IBancoDeDadosFinal banco;
    /**
     * Creates new form CadastroPalavras
     */
    public CadastroPalavras() {
        initComponents();
        LimpaFormulario();
        inicializarGenerosExistentes();
        inicializarNumerosExistentes();
        inicializarTemposExistentes();
        inicializarPessoasExistentes();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        Nome = new javax.swing.JLabel();
        NomeText = new javax.swing.JTextField();
        Radical = new javax.swing.JLabel();
        RadicalText = new javax.swing.JTextField();
        Genero = new javax.swing.JLabel();
        jScrollPane5 = new javax.swing.JScrollPane();
        jlGenero = new javax.swing.JList();
        Numero = new javax.swing.JLabel();
        jScrollPane6 = new javax.swing.JScrollPane();
        jlNumero = new javax.swing.JList();
        Tempo = new javax.swing.JLabel();
        jScrollPane7 = new javax.swing.JScrollPane();
        jlTempo = new javax.swing.JList();
        Pessoa = new javax.swing.JLabel();
        jScrollPane8 = new javax.swing.JScrollPane();
        jlPessoa = new javax.swing.JList();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Cadastro de Palavras"));

        Nome.setText("Nome:");

        Radical.setText("Radical:");

        Genero.setText("Gênero:");

        jlGenero.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        jlGenero.setToolTipText("Gênero da Palavra");
        jScrollPane5.setViewportView(jlGenero);

        Numero.setText("Número:");

        jlNumero.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        jlNumero.setToolTipText("Gênero da Palavra");
        jScrollPane6.setViewportView(jlNumero);

        Tempo.setText("Tempo:");

        jlTempo.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        jlTempo.setToolTipText("Gênero da Palavra");
        jScrollPane7.setViewportView(jlTempo);

        Pessoa.setText("Pessoa:");

        jlPessoa.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        jlPessoa.setToolTipText("Gênero da Palavra");
        jScrollPane8.setViewportView(jlPessoa);

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addGap(10, 10, 10)
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(jPanel1Layout.createSequentialGroup()
                                .addGap(33, 33, 33)
                                .addComponent(Genero))
                            .addComponent(jScrollPane5, javax.swing.GroupLayout.PREFERRED_SIZE, 125, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addGroup(jPanel1Layout.createSequentialGroup()
                                .addGap(21, 21, 21)
                                .addComponent(jScrollPane6, javax.swing.GroupLayout.PREFERRED_SIZE, 128, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addComponent(Numero)
                                .addGap(38, 38, 38)))
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(jPanel1Layout.createSequentialGroup()
                                .addGap(30, 30, 30)
                                .addComponent(Tempo)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED, 94, Short.MAX_VALUE))
                            .addGroup(jPanel1Layout.createSequentialGroup()
                                .addGap(17, 17, 17)
                                .addComponent(jScrollPane7, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)))
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addGroup(jPanel1Layout.createSequentialGroup()
                                .addComponent(Pessoa)
                                .addGap(35, 35, 35))
                            .addComponent(jScrollPane8, javax.swing.GroupLayout.PREFERRED_SIZE, 121, javax.swing.GroupLayout.PREFERRED_SIZE)))
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addComponent(Nome)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(NomeText)
                        .addGap(18, 18, 18)
                        .addComponent(Radical)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(RadicalText, javax.swing.GroupLayout.PREFERRED_SIZE, 216, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap())
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(Nome)
                    .addComponent(NomeText, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(Radical)
                    .addComponent(RadicalText, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                    .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(jPanel1Layout.createSequentialGroup()
                            .addComponent(Pessoa)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                            .addComponent(jScrollPane8, javax.swing.GroupLayout.PREFERRED_SIZE, 107, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGroup(jPanel1Layout.createSequentialGroup()
                            .addComponent(Genero)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                            .addComponent(jScrollPane5, javax.swing.GroupLayout.PREFERRED_SIZE, 107, javax.swing.GroupLayout.PREFERRED_SIZE)))
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addComponent(Tempo)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jScrollPane7, javax.swing.GroupLayout.PREFERRED_SIZE, 107, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addComponent(Numero)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(jScrollPane6, javax.swing.GroupLayout.PREFERRED_SIZE, 107, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap(188, Short.MAX_VALUE))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );

        pack();
    }// </editor-fold>                        

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(CadastroPalavras.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(CadastroPalavras.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(CadastroPalavras.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(CadastroPalavras.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new CadastroPalavras().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify                     
    private javax.swing.JLabel Genero;
    private javax.swing.JLabel Nome;
    private javax.swing.JTextField NomeText;
    private javax.swing.JLabel Numero;
    private javax.swing.JLabel Pessoa;
    private javax.swing.JLabel Radical;
    private javax.swing.JTextField RadicalText;
    private javax.swing.JLabel Tempo;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane5;
    private javax.swing.JScrollPane jScrollPane6;
    private javax.swing.JScrollPane jScrollPane7;
    private javax.swing.JScrollPane jScrollPane8;
    private javax.swing.JList jlGenero;
    private javax.swing.JList jlNumero;
    private javax.swing.JList jlPessoa;
    private javax.swing.JList jlTempo;
    // End of variables declaration                   

    private void LimpaFormulario(){
        //Variaveis de Dados
        this.jlGenero.setEnabled(true);
        this.jlGenero.setModel(this.jlGenero.getModel());
        this.jlNumero.setEnabled(true);
        this.jlNumero.setModel(this.jlNumero.getModel());
        this.jlTempo.setEnabled(true);
        this.jlTempo.setModel(this.jlTempo.getModel());
        this.jlPessoa.setEnabled(true);
        this.jlPessoa.setModel(this.jlPessoa.getModel());
    }
    
    private void inicializarGenerosExistentes() {
        try {
            this.jlGenero.setModel(new javax.swing.AbstractListModel() {

                String[] strings = obterDadosGeneros();

                public int getSize() {
                    return strings.length;
                }

                public Object getElementAt(int i) {
                    return strings[i];
                }
            });

        } catch (ErroBDException ex) {
            JOptionPane.showMessageDialog(null, "Erro na inicialização da janela!", "Mensagem Informativa", JOptionPane.PLAIN_MESSAGE, null);
        }
    }

    private String[] obterDadosGeneros() throws ErroBDException {
        List<String> dadosGeneros = this.banco.consultarNomesTodosGeneros();
        String[] out = new String[dadosGeneros.size()];
        for (int i = 0; i < out.length; i++) {
            out[i] = dadosGeneros.get(i);
        }
        return out;
    }

    private void inicializarNumerosExistentes() {
        try {
            this.jlNumero.setModel(new javax.swing.AbstractListModel() {

                String[] strings = obterDadosNumeros();

                public int getSize() {
                    return strings.length;
                }

                public Object getElementAt(int i) {
                    return strings[i];
                }
            });

        } catch (ErroBDException ex) {
            JOptionPane.showMessageDialog(null, "Erro na inicialização da janela!", "Mensagem Informativa", JOptionPane.PLAIN_MESSAGE, null);
        }
    }

    private String[] obterDadosNumeros() throws ErroBDException {
        List<String> dadosNumeros = this.banco.consultarNomesTodosNumeros();
        String[] out = new String[dadosNumeros.size()];
        for (int i = 0; i < out.length; i++) {
            out[i] = dadosNumeros.get(i);
        }
        return out;
    }

    private void inicializarTemposExistentes() {
        try {
            this.jlTempo.setModel(new javax.swing.AbstractListModel() {

                String[] strings = obterDadosTempos();

                public int getSize() {
                    return strings.length;
                }

                public Object getElementAt(int i) {
                    return strings[i];
                }
            });

        } catch (ErroBDException ex) {
            JOptionPane.showMessageDialog(null, "Erro na inicialização da janela!", "Mensagem Informativa", JOptionPane.PLAIN_MESSAGE, null);
        }
    }

    private String[] obterDadosTempos() throws ErroBDException {
        List<String> dadosTempos = this.banco.consultarNomesTodosTempos();
        String[] out = new String[dadosTempos.size()];
        for (int i = 0; i < out.length; i++) {
            out[i] = dadosTempos.get(i);
        }
        return out;
    }

    private void inicializarPessoasExistentes() {
        try {
            this.jlPessoa.setModel(new javax.swing.AbstractListModel() {

                String[] strings = obterDadosPessoas();

                public int getSize() {
                    return strings.length;
                }

                public Object getElementAt(int i) {
                    return strings[i];
                }
            });

        } catch (ErroBDException ex) {
            JOptionPane.showMessageDialog(null, "Erro na inicialização da janela!", "Mensagem Informativa", JOptionPane.PLAIN_MESSAGE, null);
        }
    }

    private String[] obterDadosPessoas() throws ErroBDException {
        List<String> dadosPessoas = this.banco.consultarNomesTodasPessoas();
        String[] out = new String[dadosPessoas.size()];
        for (int i = 0; i < out.length; i++) {
            out[i] = dadosPessoas.get(i);
        }
        return out;
    }
    
}

eu não consigo ver nenhum valor nulo, o que pode estar acontecendo?

O erro diz-te onde é a linha.
Nessa linha, a única coisa que pode estar null é "this.banco"
Analisando o código vejo que essa variavel nunca é inicializada logo estará mesmo a null.

Mas ela foi iniciada na classe principal:

package br.ufal.ic.falibras.semantic.main;

import br.ufal.ic.falibras.common.persistence.IBancoDeDadosFinal;
import br.ufal.ic.falibras.common.persistence.hsqldb.BDControllerFinal;
import br.ufal.ic.falibras.common.propriedades.ErroPropertyException;
import br.ufal.ic.falibras.common.propriedades.IPropertiesReader;
import br.ufal.ic.falibras.common.propriedades.PropertiesMgr;
import br.ufal.ic.falibras.ihc.principal.FramePrincipal;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import org.hsqldb.HsqlException;

public class FalibrasSemanticAnalyzerMEFinal extends JFrame {

    public static void main(String[] args) {
        try{
            IBancoDeDadosFinal banco;
            IPropertiesReader properties;
            try {
                properties = PropertiesMgr.getInstance("Pt-br.cfg");
                banco = BDControllerFinal.getInstance("sa", "", "jdbc:hsqldb:hsql://localhost/xdb", "org.hsqldb.jdbcDriver", properties);
            } catch (ErroPropertyException ex) {
                Logger.getLogger(FalibrasSemanticAnalyzerMEFinal.class.getName()).log(Level.SEVERE, null, ex);
            }

            java.awt.EventQueue.invokeLater(new Runnable() {
                @Override
                public void run() {
                    FramePrincipal fp = new FramePrincipal();
                    fp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    fp.setExtendedState(JFrame.MAXIMIZED_BOTH);
                    fp.setVisible(true);
                }
            });
        }
        catch(HsqlException e){
            System.out.println(e.getMessage());
            e.printStackTrace();
	}
    }
}

Pessoal, só pra ATUALIZAR, eu acabei de rodar o DEBUG e ele fala que o banco está retornando null, eu já olhei tudo e não dá pra perceber nada de errado, vocês poderiam me ajudar nisso?

Eu não queria postar o código do banco já que é muito extenso, mas como não vejo outra opção, aqui está:

package br.ufal.ic.falibras.common.persistence.hsqldb;


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import br.ufal.ic.falibras.common.metamodel.PalavraAfeta;
import br.ufal.ic.falibras.common.metamodel.Genero;
import br.ufal.ic.falibras.common.metamodel.Numero;
import br.ufal.ic.falibras.common.metamodel.Palavra;
import br.ufal.ic.falibras.common.metamodel.Pessoa;
import br.ufal.ic.falibras.common.metamodel.SentidoSemantico;
import br.ufal.ic.falibras.common.metamodel.Tempo;
import br.ufal.ic.falibras.common.persistence.ErroBDException;
import br.ufal.ic.falibras.common.persistence.ErroConexaoException;
import br.ufal.ic.falibras.common.persistence.ErroExecucaoException;
import br.ufal.ic.falibras.common.persistence.IBancoDeDadosFinal;
import br.ufal.ic.falibras.common.propriedades.IPropertiesReader;
import br.ufal.ic.falibras.preprocessor.ITextPreprocessor;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

public class BDControllerFinal implements IBancoDeDadosFinal{
    
    //singleton instance
    private static BDControllerFinal instance;
    
    //JDBC Data
    private Connection conexao;
    private String driver;
    private String url;
    private String usuario;
    private String senha;
    private IPropertiesReader properties;
    
    //Variáveis Importantes
    private int porcentagemDist;
    ITextPreprocessor TextPreprocessor;
    
    //construtor padrão
    private BDControllerFinal(){
        super();
        this.conexao = null;
    }
    
    //Singleton Method
    public static BDControllerFinal getInstance(String usuario, String senha, String bd, String driver, IPropertiesReader propertiesReader) {
        if (instance == null) {
            instance = new BDControllerFinal();
        }
        instance.usuario = usuario;
        instance.senha = senha;
        instance.url = bd;
        instance.driver = driver;
        instance.properties = propertiesReader;
        
        return instance;
    }
    
    private Connection getConexao() throws ErroConexaoException {
        try {
            if (this.conexao == null) {
                Class.forName(driver);
                conexao = DriverManager.getConnection(url, usuario, senha);
                JOptionPane.showMessageDialog(null, "Conectado com Sucesso!");
            }
            return this.conexao;
        } catch (ClassNotFoundException e) {
            throw new ErroConexaoException(properties.getProperty("ErroConexaoBD") + " Usuario: " + usuario + " Senha: " + senha, e);
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(null, e);
            return null;
        }
        
    }
    
    /**
     * Executa comandos SQL de inclusão, alteração e exclusão
     * @param comandoSql Comando SQL a ser executado no banco de dados
     * @throws ErroConexaoException
     * @throws ErroExecucaoException
     */
    
    private void executarComando(String comandoSql) throws ErroConexaoException, ErroExecucaoException {
        try {
            Statement stmt = getConexao().createStatement();
            stmt.executeUpdate(comandoSql);
        } catch (ErroConexaoException e) {
            throw new ErroExecucaoException(properties.getProperty("ErroConexaoBD") + " Usuario: " + usuario + " Senha: " + senha, e);
        } catch (SQLException e) {
            throw new ErroExecucaoException(properties.getProperty("ErroExecucaoComando") + comandoSql, e);
        }
    }
    
    /**
     * Executa comandos SQL de Consulta
     * @param comandoSql Comando SQL a ser executado no banco de dados
     * @throws ErroConexaoException
     * @throws ErroExecucaoException
     */
    
    private ResultSet executarConsulta(String consultaSql) throws ErroConexaoException, ErroExecucaoException {
        ResultSet rs = null;

        try {
            Statement stmt = getConexao().createStatement();
            rs = stmt.executeQuery(consultaSql);
        } catch (ErroConexaoException e) {
            throw new ErroExecucaoException(properties.getProperty("ErroConexaoBD") + " Usuario: " + usuario + " Senha: " + senha, e);
        } catch (SQLException e) {
        	System.out.println(e.getMessage());
        	e.printStackTrace();
            throw new ErroExecucaoException(properties.getProperty("ErroExecucaoComando") + consultaSql, e);
        }
        return rs;
    }
    
/////////////////////PALAVRA//////////////////////////////////
    
    @Override
    public int consultarIdPalavra(String Palavra) throws ErroBDException {
        String sql = "SELECT id FROM palavra WHERE nome = '" + Palavra + "'";
        try {
            ResultSet rs = executarConsulta(sql);
            return rs.getInt(1);
        } catch (SQLException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarPalavra"), e);
        } catch (ErroConexaoException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarPalavra"), e);
        } catch (ErroExecucaoException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarPalavra"), e);
        }
    }
    
    @Override
    public List<Palavra> obterTodasPalavras() throws ErroBDException {
        List<Palavra> out = new ArrayList<Palavra>();
        String sql = "SELECT id FROM palavra ORDER BY nome";
        try {
            ResultSet rs = executarConsulta(sql);
            while (rs.next()) {
                out.add(consultarPalavra(rs.getInt(1)));
            }
        } catch (SQLException e) {
            throw new ErroBDException(properties.getProperty("ErroObterIdPalavra"), e);
        } catch (ErroConexaoException e) {
            throw new ErroBDException(properties.getProperty("ErroObterIdPalavra"), e);
        } catch (ErroExecucaoException e) {
            throw new ErroBDException(properties.getProperty("ErroObterIdPalavra"), e);
        }
        return out;
    }
    
    @Override
    public List<Palavra> obterTodasPalavras(String filtro) throws ErroBDException {
        List<Palavra> out = new ArrayList<Palavra>();
        String sql = "SELECT id FROM palavra WHERE nome LIKE '%" + filtro + "%' ORDER BY nome";
        try {
            ResultSet rs = executarConsulta(sql);
            while (rs.next()) {
                out.add(consultarPalavra(rs.getInt(1)));
            }
        } catch (SQLException e) {
            throw new ErroBDException(properties.getProperty("ErroObterIdPalavra"), e);
        } catch (ErroConexaoException e) {
            throw new ErroBDException(properties.getProperty("ErroObterIdPalavra"), e);
        } catch (ErroExecucaoException e) {
            throw new ErroBDException(properties.getProperty("ErroObterIdPalavra"), e);
        }
        return out;
    }
    
    @Override
    public int[] ObterSentidos(int idPalavra) throws SQLException{
        String sql = "SELECT id_sentido FROM palavra_sentido_aft WHERE id_palavra = '" + idPalavra + "'";
        try {
            ResultSet rs = executarConsulta(sql);
            int[] id_sentido = new int[rs.getRow()];
            int counter = 0;
            while(rs.next()){
                id_sentido[counter] = rs.getInt(counter);
                counter++;
            }
            return id_sentido;
        }
        catch (ErroConexaoException ex) {
            Logger.getLogger(BDControllerFinal.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ErroExecucaoException ex) {
            Logger.getLogger(BDControllerFinal.class.getName()).log(Level.SEVERE, null, ex);
        }  
        return null;
    }
    
    @Override
    public int[] ObterPalavraAFT(int idSentido) throws SQLException{
        String sql = "SELECT id_palavra_aft FROM sentido_palavra_aft WHERE id_sentido ='" + idSentido + "'";
        try {
            ResultSet rs = executarConsulta(sql);
            int[] id_palavra_aft = new int[rs.getRow()];
            int counter = 0;
            while(rs.next()){
                id_palavra_aft[counter] = rs.getInt(counter);
                counter++;
            }
            return id_palavra_aft;
        } catch (ErroConexaoException ex) {
            Logger.getLogger(BDControllerFinal.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ErroExecucaoException ex) {
            Logger.getLogger(BDControllerFinal.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }
    
    @Override
    public void alterarPalavra(int idPalavra, Palavra palavra) throws ErroBDException {
        String sql = "UPDATE palavra SET nome = '" + palavra.getNome() + "', radical = '" + palavra.getRadical() + "', id_sentido = '" + palavra.getSentidoDefault()+ "', id_genero = '" + palavra.getIdGenero()
                + "', id_numero = '" + palavra.getIdNumero()
                + "', id_tempo = '" + palavra.getIdTempo()
                + "', id_pessoa = '" + palavra.getIdPessoa()
                + "' "
                + "WHERE id = '" + idPalavra + "'";
        try {
            executarComando(sql);
        } catch (ErroConexaoException e) {
            throw new ErroBDException(properties.getProperty("ErroAlterarPalavra"), e);
        } catch (ErroExecucaoException e) {
            throw new ErroBDException(properties.getProperty("ErroAlterarPalavra"), e);
        }
    }
    
    @Override
    public void ObterSentidoAFT(int IdPalavraAtual, int IdPalavraProxima, int posicaoAtual, int posicaoProxima, int porcentagemDist) throws ErroBDException, SQLException{
        try {
            int[] id_palavraAFT = ObterIdPalavraAFT(IdPalavraProxima);
            for (int i = 0; i < id_palavraAFT.length; i++) {           
                String sql = "SELECT id_sentido, id_palavra_aft,certeza FROM palavra_sentido_aft WHERE id_palavra='" + IdPalavraAtual + "' AND id_palavra_aft= '" + id_palavraAFT[i] + "'";
                ResultSet rs = executarConsulta(sql);
                if(rs.getInt(1)!=0){   
                    PalavraAfeta aft = consultaAfeta(rs.getInt(2));
                    int certeza = rs.getInt(3);
                    if(posicaoAtual > posicaoProxima){
                        certeza = certeza + (certeza*((aft.getcertezaAlt()/100)+((porcentagemDist/100)/(posicaoAtual - posicaoProxima))));
                    }
                    else{
                        certeza = certeza + (certeza*((aft.getcertezaAlt()/100)+((porcentagemDist/100)/(posicaoProxima - posicaoAtual))));
                    }
                    String sql2 = "UPDATE palavra_sentido_aft SET certeza ='" + certeza + "' WHERE id_palavra='" + IdPalavraAtual + "' AND id_sentido='" + rs.getInt(1) + "'";
                    executarComando(sql2);
                }
                else{}
            }
        } catch (ErroConexaoException ex) {
            Logger.getLogger(BDControllerFinal.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ErroExecucaoException ex) {
            Logger.getLogger(BDControllerFinal.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
   
    @Override
    public int[] ObterIdPalavraAFT(int idPalavra) throws SQLException{
        String sql ="SELECT id FROM palavra_aft WHERE id_palavra ='" + idPalavra + "'";
        try {
            ResultSet rs = executarConsulta(sql);
            int[] id_palavra_aft = new int[rs.getRow()];
            int counter = 0;
            while(rs.next()){
                id_palavra_aft[counter] = rs.getInt(counter);
                counter++;
            }
            return id_palavra_aft;
        } catch (ErroConexaoException ex) {
            Logger.getLogger(BDControllerFinal.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ErroExecucaoException ex) {
            Logger.getLogger(BDControllerFinal.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }
    
    @Override
    public void obterCertezaCorreta(String frase) throws ErroBDException, SQLException{
        List<String> fraseDIV = TextPreprocessor.separarFrases(frase);
        String[] Aux;
        Aux = (String[])fraseDIV.toArray();
        Palavra[] palavras = null;
        for (int it = 0; it < fraseDIV.size(); it++) {
             palavras[it] = consultarPalavraNome(Aux[it]);
        }
        for (int i = 0; i < palavras.length; i++) {
            for (int j = 0; j < palavras.length; j++) {
                if(i!=j){
                  ObterSentidoAFT(palavras[i].getId(), palavras[j].getId(), i, j, getPorcentagemDist());
                }
                else{
                }
            }
        }
    }
    
    @Override
    public int ObterCerteza(int idSentido) throws SQLException{
        String sql = "SELECT certeza FROM palavra_sentido_aft WHERE id_sentido = '" + idSentido + "'";
        try {
            ResultSet rs = executarConsulta(sql);
            return rs.getInt(1);
        } catch (ErroConexaoException ex) {
            Logger.getLogger(BDControllerFinal.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ErroExecucaoException ex) {
            Logger.getLogger(BDControllerFinal.class.getName()).log(Level.SEVERE, null, ex);
        }
        return 0; 
    }
    
    @Override
    public void adicionarPalavra(Palavra palavra) throws ErroBDException {
        String sql = "INSERT INTO palavra (id, nome, radical, id_genero, id_numero, id_tempo, id_pessoa) VALUES ('" + palavra.getId() + "', '" + palavra.getNome() + "', '" + palavra.getRadical() + "', '" + palavra.getIdGenero()
                + "', '" + palavra.getIdNumero() + "', '" + palavra.getIdTempo() + "', '" + palavra.getIdPessoa() + "')";
        try{
            executarComando(sql);
        }
        catch (ErroConexaoException e) {
            throw new ErroBDException(properties.getProperty("ErroAdicionarPalavra"), e);
        } catch (ErroExecucaoException e) {
            throw new ErroBDException(properties.getProperty("ErroAdicionarPalavra"), e);
        }
    }    
    
    @Override
    public void adicionarSentido(SentidoSemantico ss){
        String sql = "INSERT INTO sentido_semantico(id, nome_sentido) VALUES ('" + ss.getId() + "','" + ss.getNomeSentido() + "')";
        try {
            executarComando(sql);
        } catch (ErroConexaoException ex) {
            Logger.getLogger(BDControllerFinal.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ErroExecucaoException ex) {
            Logger.getLogger(BDControllerFinal.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    @Override
    public void adicionarPalavraAFT(PalavraAfeta pa){
        String sql = "INSERT INTO palavra_aft(id, id_palavra, certeza_alt) VALUES ('" + pa.getId() + "','" + pa.getPalavra() + "','" + pa.getcertezaAlt() + "')";
        try {
            executarComando(sql);
        } catch (ErroConexaoException ex) {
            Logger.getLogger(BDControllerFinal.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ErroExecucaoException ex) {
            Logger.getLogger(BDControllerFinal.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    @Override
    public void alterarSentido(int idSentido, SentidoSemantico sentido) throws ErroBDException {
        String sql = "UPDATE sentido_semantico SET nome_sentido = '" + sentido.getNomeSentido()+ "' " + "WHERE id = '" + idSentido + "'";
        try {
            executarComando(sql);
        } catch (ErroConexaoException e) {
            throw new ErroBDException(properties.getProperty("ErroAlterarSentido"), e);
        } catch (ErroExecucaoException e) {
            throw new ErroBDException(properties.getProperty("ErroAlterarSentido"), e);
        }
    }
    
    @Override
    public void alterarPalavraAFT(int idPalavraAFT, PalavraAfeta palavraAFT) throws ErroBDException {
        String sql = "UPDATE palavra_aft SET id_palavra = '" + palavraAFT.getPalavra() + "', certeza_alt = '" + palavraAFT.getcertezaAlt()+ "' " + "WHERE id = '" + idPalavraAFT + "'";
        try {
            executarComando(sql);
        } catch (ErroConexaoException e) {
            throw new ErroBDException(properties.getProperty("ErroAlterarSentido"), e);
        } catch (ErroExecucaoException e) {
            throw new ErroBDException(properties.getProperty("ErroAlterarSentido"), e);
        }
    }
    
    @Override
    public boolean existePalavra(int idPalavra) throws ErroBDException {
        String sql = "SELECT * FROM palavra WHERE id = '" + idPalavra + "'";
        try {
            if (executarConsulta(sql).next()) {
                return true;
            } else {
                return false;
            }
        } catch (SQLException e) {
            throw new ErroBDException(properties.getProperty("ErroExistenciaPalavra"), e);
        } catch (ErroConexaoException e) {
            throw new ErroBDException(properties.getProperty("ErroExistenciaPalavra"), e);
        } catch (ErroExecucaoException e) {
            throw new ErroBDException(properties.getProperty("ErroExistenciaPalavra"), e);
        }
    }

    @Override
    public void excluirPalavra(int idPalavra) throws ErroBDException {
        String sql1 = "DELETE FROM palavra_sentido_aft WHERE id_palavra = '" + idPalavra + "'";
        String sql2 = "DELETE FROM palavra WHERE id = '" + idPalavra + "'";
        try {
            executarComando(sql1);
            executarComando(sql2);
        } catch (ErroConexaoException e) {
            throw new ErroBDException(properties.getProperty("ErroExcluirPalavra"), e);
        } catch (ErroExecucaoException e) {
            throw new ErroBDException(properties.getProperty("ErroExcluirPalavra"), e);
        }
    }
    
    @Override
    public void excluirSentido(int idSentido) throws ErroBDException {
        String sql1 = "DELETE FROM palavra_sentido_aft WHERE id_sentido = '" + idSentido + "'";
        String sql2 = "DELETE FROM sentido WHERE id = '" + idSentido + "'";
        try {
            executarComando(sql1);
            executarComando(sql2);
        } catch (ErroConexaoException e) {
            throw new ErroBDException(properties.getProperty("ErroExcluirSentido"), e);
        } catch (ErroExecucaoException e) {
            throw new ErroBDException(properties.getProperty("ErroExcluirSentido"), e);
        }
    }
    
    @Override
    public void excluirPalavraAFT(int idPalavraAFT) throws ErroBDException {
        String sql1 = "DELETE FROM palavra_sentido_aft WHERE id_palavra_aft = '" + idPalavraAFT + "'";
        String sql2 = "DELETE FROM palavra_aft WHERE id = '" + idPalavraAFT + "'";
        try {
            executarComando(sql1);
            executarComando(sql2);
        } catch (ErroConexaoException e) {
            throw new ErroBDException(properties.getProperty("ErroExcluirSentido"), e);
        } catch (ErroExecucaoException e) {
            throw new ErroBDException(properties.getProperty("ErroExcluirSentido"), e);
        }
    }
    
    @Override
    public Palavra consultarPalavra(int idPalavra) throws ErroBDException {
        Palavra output = null;
        String sql = "SELECT id,nome,radical,id_genero,id_numero,id_tempo, id_pessoa FROM palavra WHERE id = '" + idPalavra + "'";
        try {
            ResultSet rs = executarConsulta(sql);
            if (rs.next()) {
                String sql2 = "SELECT id_sentido FROM palavra_sentido WHERE id_palavra ='" + rs.getInt(1) + "'";
                ResultSet rs2 = executarConsulta(sql2);
                int[] id_sentido = new int[rs.getRow()];
                int counter = 0;
                while(rs.next()){
                    id_sentido[counter] = rs2.getInt(counter);
                    counter++;
                }
                output = new Palavra(rs.getInt(1), rs.getString(2), rs.getString(3), consultarGenero(rs.getInt(4)), consultarNumero(rs.getInt(5)), consultarTempo(rs.getInt(6)), consultarPessoa(rs.getInt(7)), id_sentido);
            }
            return output;
        } catch (SQLException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarPalavra"), e);
        } catch (ErroConexaoException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarPalavra"), e);
        } catch (ErroExecucaoException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarPalavra"), e);
        }
    }
    
    @Override
    public SentidoSemantico consultarSentidoNome(String sentido) throws SQLException{
        SentidoSemantico output = null;
        String sql = "SELECT id, nome_sentido FROM sentido_semantico WHERE nome_sentido='" + sentido + "'";
        try {
            ResultSet rs = executarConsulta(sql);
            if(rs.next()){
                output = new SentidoSemantico(rs.getInt(1), rs.getString(2));
            }
            return output;
        } catch (ErroConexaoException ex) {
            Logger.getLogger(BDControllerFinal.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ErroExecucaoException ex) {
            Logger.getLogger(BDControllerFinal.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }
    
    @Override
    public Palavra consultarPalavraNome(String Palavra) throws ErroBDException {
        Palavra output = null;
        String sql = "SELECT id,nome,radical,id_genero,id_numero,id_tempo, id_pessoa FROM palavra WHERE nome = '" + Palavra + "'";
        try {
            ResultSet rs = executarConsulta(sql);
            if (rs.next()) {
                String sql2 = "SELECT id_sentido FROM palavra_sentido WHERE id_palavra ='" + rs.getInt(1) + "'";
                ResultSet rs2 = executarConsulta(sql2);
                int[] id_sentido = new int[rs.getRow()];
                int counter = 0;
                while(rs.next()){
                    id_sentido[counter] = rs2.getInt(counter);
                    counter++;
                }
                output = new Palavra(rs.getInt(1), rs.getString(2), rs.getString(3), consultarGenero(rs.getInt(4)), consultarNumero(rs.getInt(5)), consultarTempo(rs.getInt(6)), consultarPessoa(rs.getInt(7)), id_sentido);
            }
            return output;
        } catch (SQLException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarPalavra"), e);
        } catch (ErroConexaoException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarPalavra"), e);
        } catch (ErroExecucaoException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarPalavra"), e);
        }
    }
    
    @Override
    public PalavraAfeta consultarPalavraAFTNome(String palavraAFT) throws SQLException, ErroBDException{
        PalavraAfeta output = null;
        String sql = "SELECT id, id_palavra, certeza_alt FROM palavra_aft WHERE id_palavra='" + consultarIdPalavra(palavraAFT) + "'";
        try {
            ResultSet rs = executarConsulta(sql);
            if(rs.next()){
                output = new PalavraAfeta(rs.getInt(1), rs.getInt(2), rs.getInt(3));
            }
            return output;
        } catch (ErroConexaoException ex) {
            Logger.getLogger(BDControllerFinal.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ErroExecucaoException ex) {
            Logger.getLogger(BDControllerFinal.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }
    
    @Override
    public Genero consultarGenero(int idGenero) throws ErroBDException {
        String sql = "SELECT id,nome FROM genero WHERE id = '" + idGenero + "'";
        try {
            ResultSet rs = executarConsulta(sql);
            if (rs.next()) {
                return new Genero(rs.getInt(1), rs.getString(2));
            } else {
                return null;
            }
        } catch (SQLException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarGenero"), e);
        } catch (ErroConexaoException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarGenero"), e);
        } catch (ErroExecucaoException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarGenero"), e);
        }
    }

    @Override
    public Tempo consultarTempo(int idTempo) throws ErroBDException {
        String sql = "SELECT id,nome FROM tempo WHERE id = '" + idTempo + "'";
        try {
            ResultSet rs = executarConsulta(sql);
            if (rs.next()) {
                return new Tempo(rs.getInt(1), rs.getString(2));
            } else {
                return null;
            }
        } catch (SQLException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarTempo"), e);
        } catch (ErroConexaoException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarTempo"), e);
        } catch (ErroExecucaoException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarTempo"), e);
        }
    }

    @Override
    public Numero consultarNumero(int idNumero) throws ErroBDException {
        String sql = "SELECT id,nome FROM numero WHERE id = '" + idNumero + "'";
        try {
            ResultSet rs = executarConsulta(sql);
            if (rs.next()) {
                return new Numero(rs.getInt(1), rs.getString(2));
            } else {
                return null;
            }
        } catch (SQLException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarNumero"), e);
        } catch (ErroConexaoException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarNumero"), e);
        } catch (ErroExecucaoException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarNumero"), e);
        }
    }

    @Override
    public Pessoa consultarPessoa(int idPessoa) throws ErroBDException {
        String sql = "SELECT id,nome FROM pessoa WHERE id = '" + idPessoa + "'";
        try {
            ResultSet rs = executarConsulta(sql);
            if (rs.next()) {
                return new Pessoa(rs.getInt(1), rs.getString(2));
            } else {
                return null;
            }
        } catch (SQLException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarPessoa"), e);
        } catch (ErroConexaoException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarPessoa"), e);
        } catch (ErroExecucaoException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarPessoa"), e);
        }
    }

    @Override
    public Genero consultarGenero(String nomeGenero) throws ErroBDException {
        String sql = "SELECT id,nome FROM genero WHERE nome = '" + nomeGenero + "'";
        try {
            ResultSet rs = executarConsulta(sql);
            if (rs.next()) {
                return new Genero(rs.getInt(1), rs.getString(2));
            } else {
                return null;
            }
        } catch (SQLException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarGenero"), e);
        } catch (ErroConexaoException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarGenero"), e);
        } catch (ErroExecucaoException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarGenero"), e);
        }
    }

    @Override
    public Tempo consultarTempo(String nomeTempo) throws ErroBDException {
        String sql = "SELECT id,nome FROM tempo WHERE nome = '" + nomeTempo + "'";
        try {
            ResultSet rs = executarConsulta(sql);
            if (rs.next()) {
                return new Tempo(rs.getInt(1), rs.getString(2));
            } else {
                return null;
            }
        } catch (SQLException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarTempo"), e);
        } catch (ErroConexaoException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarTempo"), e);
        } catch (ErroExecucaoException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarTempo"), e);
        }
    }

    @Override
    public Numero consultarNumero(String nomeNumero) throws ErroBDException {
        String sql = "SELECT id,nome FROM numero WHERE nome = '" + nomeNumero + "'";
        try {
            ResultSet rs = executarConsulta(sql);
            if (rs.next()) {
                return new Numero(rs.getInt(1), rs.getString(2));
            } else {
                return null;
            }
        } catch (SQLException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarNumero"), e);
        } catch (ErroConexaoException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarNumero"), e);
        } catch (ErroExecucaoException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarNumero"), e);
        }
    }

    @Override
    public Pessoa consultarPessoa(String nomePessoa) throws ErroBDException {
        String sql = "SELECT id,nome FROM pessoa WHERE nome = '" + nomePessoa + "'";
        try {
            ResultSet rs = executarConsulta(sql);
            if (rs.next()) {
                return new Pessoa(rs.getInt(1), rs.getString(2));
            } else {
                return null;
            }
        } catch (SQLException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarPessoa"), e);
        } catch (ErroConexaoException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarPessoa"), e);
        } catch (ErroExecucaoException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarPessoa"), e);
        }
    }
    
    @Override
    public List<String> consultarNomesTodasPessoas() throws ErroBDException {
        List<String> out = new ArrayList<String>();

        try {
            String sql = "SELECT nome FROM pessoa ORDER BY nome";
            ResultSet rs = executarConsulta(sql);
            while (rs.next()) {
                out.add(rs.getString(1));
            }
        } catch (SQLException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarNomePessoa"), e);
        } catch (ErroConexaoException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarNomePessoa"), e);
        } catch (ErroExecucaoException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarNomePessoa"), e);
        }

        return out;
    }

    @Override
    public List<String> consultarNomesTodosGeneros() throws ErroBDException {
        List<String> out = new ArrayList<>();
        try {
            String sql = "SELECT nome FROM genero ORDER BY nome";
            ResultSet rs = executarConsulta(sql);
            while (rs.next()) {
                out.add(rs.getString(1));
            }
        } catch (SQLException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarNomeGenero"), e);
        } catch (ErroConexaoException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarNomeGenero"), e);
        } catch (ErroExecucaoException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarNomeGenero"), e);
        }

        return out;
    }

    @Override
    public List<String> consultarNomesTodosNumeros() throws ErroBDException {
        List<String> out = new ArrayList<>();

        try {
            String sql = "SELECT nome FROM numero ORDER BY nome";
            ResultSet rs = executarConsulta(sql);
            while (rs.next()) {
                out.add(rs.getString(1));
            }
        } catch (SQLException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarNomeNumero"), e);
        } catch (ErroConexaoException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarNomeNumero"), e);
        } catch (ErroExecucaoException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarNomeNumero"), e);
        }

        return out;
    }

    @Override
    public List<String> consultarNomesTodosTempos() throws ErroBDException {
        List<String> out = new ArrayList<String>();

        try {
            String sql = "SELECT nome FROM tempo ORDER BY nome";
            ResultSet rs = executarConsulta(sql);
            while (rs.next()) {
                out.add(rs.getString(1));
            }
        } catch (SQLException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarTempo"), e);
        } catch (ErroConexaoException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarTempo"), e);
        } catch (ErroExecucaoException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarTempo"), e);
        }

        return out;
    }
    
    @Override
    public SentidoSemantico consultaSentido(int IdSentido) throws SQLException{
        String sql = "SELECT id, nome_sentido FROM sentido_semantico WHERE id ='" + IdSentido + "'";
        try {
            ResultSet rs = executarConsulta(sql);
            SentidoSemantico ss = new SentidoSemantico(rs.getInt(1), rs.getString(2));
            return ss;
        } catch (ErroConexaoException ex) {
            Logger.getLogger(BDControllerFinal.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ErroExecucaoException ex) {
            Logger.getLogger(BDControllerFinal.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        return null;
    }
    
    @Override
    public PalavraAfeta consultaAfeta(int idPalavraAfeta) throws ErroBDException {
        PalavraAfeta output = null;
        String sql = "SELECT id, id_palavra, certeza_alt FROM afeta WHERE id = '" + idPalavraAfeta + "'";
        try {
            ResultSet rs = executarConsulta(sql);
            output = new PalavraAfeta(rs.getInt(1), rs.getInt(2), rs.getInt(3));
            return output;
        } catch (SQLException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarPalavra"), e);
        } catch (ErroConexaoException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarPalavra"), e);
        } catch (ErroExecucaoException e) {
            throw new ErroBDException(properties.getProperty("ErroConsultarPalavra"), e);
        }
    }
    
    @Override
    public void setPorcentagemDist(int porcentagemDist) {
        this.porcentagemDist = porcentagemDist;
    }
    
    @Override
    public int getPorcentagemDist() {
        return porcentagemDist;
    }
}