Todo o CRUD está funcionando, porém quando é carregada a interface na tela do computador, a tabela lista os dados e quando vou fazer o uso do evento MouseClicked ele retorna um erro, “Erro ao selecionar os dados ResultSet não está posicionado corretamente, talvez precise chamar o next”, só que já tentei trocar os dois, já tentei trocar a ordem e nada resolve, não sei mais o fazer, já tentei também trocar os nomes das colunas nos métodos e no banco mais nada resolve.
Toda vez que tento usar o método ele cai direto no catch, ele não entra no try como deveria acontecer.
packagedao;importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.util.ArrayList;importjava.util.List;importutil.ConectaBancoDeDados;importutil.TransacaoBancoDados;/** * * @author JFSJUNIOR */publicclassPessoa{privatestaticfinalintNULO=0;privatestaticfinalintCAMPO_PK=1;publicstaticintinserir(bean.Pessoapessoa)throwsSQLException{intidPessoa=NULO;ConnectionconectaBancoDeDados=TransacaoBancoDados.abrirTransacao();try{StringstringSQLInsercao="INSERT INTO Pessoas(nome_pessoa) "+"VALUES(?)";try(PreparedStatementpstmt=conectaBancoDeDados.prepareStatement(stringSQLInsercao,PreparedStatement.RETURN_GENERATED_KEYS)){pstmt.setString(1,pessoa.getNomePessoa());pstmt.execute();try(ResultSetrstSet=pstmt.getGeneratedKeys()){if(rstSet!=null){rstSet.next();idPessoa=rstSet.getInt(CAMPO_PK);}}}}catch(SQLExceptionsqle){TransacaoBancoDados.desfazerTransacao();System.out.println("ERRO["+Pessoa.class.getName()+" - inserção]: "+sqle.getMessage());}returnidPessoa;}publicstaticvoidatualizar(bean.Pessoapessoa)throwsSQLException{ConnectionconectaBancoDeDados=TransacaoBancoDados.abrirTransacao();try{StringstringSQLAtualizacao="UPDATE Pessoas SET nome_pessoa = ? "+"WHERE id_pessoa = ?";try(PreparedStatementpstmt=conectaBancoDeDados.prepareStatement(stringSQLAtualizacao)){pstmt.setString(1,pessoa.getNomePessoa());pstmt.setInt(2,pessoa.getIdPessoa());pstmt.executeUpdate();}}catch(SQLExceptionsqle){TransacaoBancoDados.desfazerTransacao();System.out.println("ERRO["+Pessoa.class.getName()+" - atualização]: "+sqle.getMessage());}}publicstaticvoidexcluir(bean.Pessoapessoa)throwsSQLException{ConnectionconectaBancoDeDados=TransacaoBancoDados.abrirTransacao();try{StringstringSQLExclusao="DELETE FROM Pessoas "+"WHERE Pessoas.id_pessoa = ?";try(PreparedStatementpstmt=conectaBancoDeDados.prepareStatement(stringSQLExclusao)){pstmt.setInt(1,pessoa.getIdPessoa());pstmt.executeUpdate();}}catch(SQLExceptionsqle){TransacaoBancoDados.desfazerTransacao();System.out.println("ERRO["+Pessoa.class.getName()+" - exclusão]: "+sqle.getMessage());}}publicstaticList<bean.Pessoa>pesquisar()throwsSQLException{List<bean.Pessoa>pessoas=newArrayList<>();try(ConnectionconectaBancoDeDados=ConectaBancoDeDados.getConexao()){StringstringSQLPesquisa="SELECT * FROM Pessoas";try(PreparedStatementpstmt=conectaBancoDeDados.prepareStatement(stringSQLPesquisa)){try(ResultSetrstSet=pstmt.executeQuery()){while(rstSet.next()){bean.Pessoapessoa=newbean.Pessoa();pessoa.setIdPessoa(rstSet.getInt("id_pessoa"));pessoa.setNomePessoa(rstSet.getString("nome_pessoa"));pessoas.add(pessoa);}rstSet.close();}pstmt.close();}conectaBancoDeDados.close();}returnpessoas;}}
Onde:
cbxPessoas é o JComboBox . NUMERO_MINIMO_REGISTROS é uma contante que vale 3. Caso o número de pessoas seja igual ou menor que três, a popup do JCombBox fica muito pequena. Daí, nesse caso eu faço ela expandir para mais de 3 ao somar o tamanho da lista de pessoas com a constane.
É uma boa prática separar a camada de visão/apresentação (view) da camada de persistência (DAO), ou seja, da manipulação da conexão e manipulação do BD.