Problema ao carregar registros do banco de dados no formulário

saudações a todos!
Eu tenho um formulário. Onde eu tenho implantados os botões de navegação (Primeiro ? Anterior ? proximo ? ultimo), salvar, editar, apagar… em fim, tudo estar funcionando como manda a liturgia!

Meu problema é qui eu só consigo fazer uma coisa de cada vez;
ex.:
quando o janela e aberta, eu navego entre os registros(sem problemas), agora, caso eu apague algum registro, faço algum alteração…(ex.: apagar, cadastrar…)n consigo mais navegar entre os registros com os botões de navegaçao!
a seguinte exeção e lançada:

java.sql.SQLException: Operation not allowed after ResultSet closed

se eu cadastrar algum registro e clica no botão ultimo(pode ser qual q outro botão) pammm

java.sql.SQLException: Operation not allowed after ResultSet closed

sim, todas as alterações são feitas no BD, Mesmo com as exeções sendo lançadas!!
eu acho que o problema estar na meu método que carregar os campos do BD e coloca no formulário:
(eu uso ele no construtor da classe"janela" e nos metodos que salva e apaga registro de BD,afim de mostrar na tela as alterações)

segue o codigo:

//pega os dados no banco de dados e coloca dentro do formulario nos seus espectivos campos
private void carregarDadosNoformulario(){
    rs = rf.carregarDadosDaTabela();//seleciona todos os campos do banco de dados e ler dentro do rs
        try{      
            rs.next();
            rs.last();            
            recuperarCampoDaTabela();//recuperar os dados do banco de dados e coloca dentro do formulario
             
        } catch (SQLException ex) {
            Logger.getLogger(JanelaCadastrarFilme.class.getName()).log(Level.SEVERE, null, ex);
        }
}

private void recuperarCampoDaTabela() throws SQLException{
    
    lblCodigoBD.setText(rs.getString("cod"));
    txtNome.setText(rs.getString("nome"));
    txtObs.setText(rs.getString("obs"));
    
    String aCategoria = rs.getString("categoria");   
    cbCategoria.setSelectedItem(aCategoria);    
  
    String aQtd = rs.getString("qtd");  
    cbQtd.setSelectedItem(aQtd);  
    
    String aSituacao = rs.getString("situacao");  
    cbSituacao.setSelectedItem(aSituacao);
    
}

so por questão de informação, segue meu metodo q faz a conecção com o BD(por questão de organização, isso estar e outra classe)

public ResultSet carregarDadosDaTabela(){
            ResultSet rs = null;
            try {
                Statement stmt = conecxao.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
                rs = stmt.executeQuery("Select * from tabFilme");                 
                
            } catch (SQLException ex) {
                Logger.getLogger(RepositorioFilme.class.getName()).log(Level.SEVERE, null, ex);               
                
            }
                return rs;
            }

//metodo q salva um novo registro
public int salvarFilme(Filme novoFilme) throws SQLException{

            String consultaSalvar = "INSERT INTO tabFilme (nome, categoria, hora, data, situacao, qtd, obs) VALUES (?, ?, ?, ?, ?, ?, ?)";
            PreparedStatement pstm = conecxao.prepareStatement(consultaSalvar);
            //stm.setInt(1, 1);
            pstm.setString(1, novoFilme.getNome());
            pstm.setString(2, novoFilme.getCategoria());
            pstm.setString(3, novoFilme.getHora());
            pstm.setString(4, novoFilme.getData());
            pstm.setString(5, novoFilme.getSituacao());
            pstm.setInt(6, novoFilme.getQtd());
            pstm.setString(7, novoFilme.getObs());
            
            
            // retorna a quantidade de linhas afetadas
            int resultado = pstm.executeUpdate();
          
            finalizarConexao(pstm, conecxao);
            return resultado;
            
	}

//metodo que finaliza uma determina conecao
private void finalizarConexao(Statement stm, Connection conexao) throws SQLException{
		stm.close();
		conexao.close();
	}

obs.: desculpas pela falta de informações técnicas, é qui sou novo em java ainda!!! e desculpas se fiz alguma besteira ai, é qui, esse é meu 1° acesso no forum e n sei muito das regras da lista(ainda)!!!
abraços!

pelo jeito vc deve ta fechando seu ResultSet no momento errado, tira aquele metodo ali onde vc fecha o ResultSet e ve se continua o mesmo erro.

vi uma coisa vc fecha a conexão mas não instancia uma nova conexão quando vai fazer uma consulta, faça um método que te retorne uma instancia nova de uma conexão, por que ali vc deve instanciar so uam conexao e ai como vc fecha ela quando for utilizar de novo vai ocorre essa exception

Sei…
eu sempre desconfiei disso: ?fecha a conecxao e depois tentar usa-la novamente!!?
mais, abem da verdade, não estou conseguindo implementar isso!

Flw ai pelas dicas, vou tentar resolver!!!
abraços.

revolvi!!

no inicio da classe, eu declaro uma variável do tipo “RepositorioFilme”

RepositorioFilme rf

assim, toda vez que eu precisar fazer alguma consulta no BD eu crio um novo objeto. pammmm

rf = new RepositorioFilme();
rf.salvarFilme(filme);

agora, quando se tratar dos botões de navegação, eu uso o método “obterInstancia” ele me retorna a mesma instancia, isso é, caso ela ja tenha sido criada anteriormente! Se não, ele cria uma nova p/ mim!

[code]
rf = RepositorioFilme.obiterInstancia();
rs = rf.carregarDadosDaTabela();
[/cod]
(vou p/ frente e p/ traz sem precisar criar um nova conecxao)
ai com o rs criado, eu ando entre os registros do banco e trago p/ minha aplicação!!!

em fim,
talvez n seja a melhor forma, pois toda vez é criado uma nova conecxao!!!
exeto p/ os botões de navegação(primeiro -proximo - anteriro - ultimo) esses usam a mesma conecxao
(pelo menos aumentou a segurança) hes

obs.: qualq conceito errado, ficarei grato se alguem me alerta! Alem do mais, iniciante tem que estar aberto a sugestões.

grato pelas dicas e informações!
abraços!

Bom, depois pode-se pensar em um pool de conexões :slight_smile: