Problema em JAVA

5 respostas
M

Ola pessoal,

Estou com um problema que ja tem 3 dias q naum consigo resolver.... o problema é o seguinte:

Estou fazendo um programa para venda, mas bem simples!!!!

O codigo a baixo faz o seguinte... ele faz um select no banco de dados e mostra o primeiro item do banco, na tela que é mostrado esse dado tem 2 botoes que fazem com que mostre o proximo item do banco de dados (um pra ir pra frente e um pra ir pra traz)... quando eu clico no botao ele da o seguinte erro:

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

Pelo oq eu entendi o result set esta sendo fechado e nao esta sendo feito um looping para que possa mostrar o proximo item do banco de dados!!!

Gostaria de saber uma forma de fazer esse looping!!!

segue abaixo o codigo que é responsavel por fazer o select e o looping no banco de dados!!!

Obrigado!!!

public Cliente(int id, ConSQL con) throws SQLException 
    {
        String sql = "select * from CLIENTES where id="+id;
        this.con = con;
        
        Statement stmt = con.getStatement();
        ResultSet rs = stmt.executeQuery(sql);
        
        try 
        {
            rs.next();
                
            this.codigo = rs.getInt(1);
            this.nome = rs.getString(2);
            this.ativo = rs.getBoolean(3);
            this.data = rs.getString(4);
            this.cpf = rs.getString(5);
            this.rg = rs.getString(6);
            this.endereco = rs.getString(7);
            this.bairro = rs.getString(8);
            this.numero = rs.getString(9);
            this.municipio = rs.getString(10);
            this.estado = rs.getString(11);
            this.cep = rs.getString(12);
            this.fone1 = rs.getString(13);
            this.fone2 = rs.getString(14);
            this.email = rs.getString(15);                
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
    }

5 Respostas

C

Tipo, voce pode posicionar o ponteiro interno do ResultSet. Voce pode tentar fazer assim, coloque no construtor da classe pra carregar a consulta no REsultSet, depois no evento de click do botao acionar o proxumo ou anterior
Exemplo:

public ConstrutorQualquer(){
this.resultSet = classeDeConsulta.carregaResultSet("Select que voce quer");

botaoProximo.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if( resultSet.next() ){
//coloque os dados nas caixas de texto
jtfNome.setText( resultSet.getString("nome"));
}else{
JOptionPane.showMessageDialog(null,"Nao tem mais");
}

}

botaoAnterior.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if( resultSet.prior() ){
//coloque os dados nas caixas de texto
jtfNome.setText( resultSet.getString("nome"));
}else{
JOptionPane.showMessageDialog(null,"Nao tem mais");
}

}
)};
P

nao seria mais facil retornar toda a consulta em um List , e depois iterar esse list?

C

Sim, se for pensar em codigo limpo e camadas sim, mas acho que esse exemplo vai ajudar ele a entender o problema que ele tava tendo.

P

pode crer,

nao tinha visto sua msg na hora que dei a minha.

M

Boa Noite Pessoa!!!

To aki de novo pra encomoda mais um poko ^^!!!

Pessoal consegui fazer a classe bean para fazer os sets e gets, mas dentro do while o bean.set nao esta funcionando. Gostaria de saber o que poderia estar acontecendo!!!

O problema que o NetBeans nao fala qual é o erro!!

segue o codigo a baixo:

while(rs.next())
        {
            try
            {
                bean = new Bean();
                
                bean.codigo = rs.getInt(1);
                bean.ativo = rs.getBoolean(2);
                bean.setData(rs.getString(3));
                bean.setNome(rs.getString(4));
                bean.setCpf(rs.getString(5));
                bean.setRg(rs.getString(6));
                bean.setEndereco(rs.getString(7));
                bean.setBairro(rs.getString(8));
                bean.setNumero(rs.getString(9));
                bean.setMunicipio(rs.getString(10));
                bean.setEstado(rs.getString(11));
                bean.setCep(rs.getString(12));
                bean.setFone1(rs.getString(13));
                bean.setFone2(rs.getString(14));
                bean.setEmail(rs.getString(15));
                
                vetor1.add(bean);
            }
            catch (SQLException e)
            {
            e.printStackTrace();
            }
        }
Criado 14 de outubro de 2007
Ultima resposta 15 de nov. de 2007
Respostas 5
Participantes 3