Problema em JAVA

5 respostas
Micke

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

Diego_Silveira

Uma forma simples de resolver seu problema é montar um Entity Bean (classe java comum que tem um atributo para cada campo de uma tabela do banco de dados e os respectivos métodos set() e get()).

Dentro do seu while voce monta uma lista de objetos Bean. Por exemplo:

public class MinhaClasse {
    
    public Vector getLista() {
        Vector v = new Vector();
        MeuBean bean;
        while( rs.next() ) {
            bean = new MeuBean();
            bean.setName( rs.getString(1) );
            bean.set...
            bean.set...
            bean.set...
            ...
            v.add(bean);
        }
        return v;
    }

}

Ai agora é so usar na sua aplicação o vector (ou qualquer outra Collection) pra paginar, ao invés de usar o ResultSet.

Qquer dúvida tamo ai…

Abraço

Micke

Consegui fazer oque vc falo, mas agora da erro em outra coisa que nao estou conseguindo resolver!!

Porque acontece o seguinte!!!

A classe que faz o rs.next ela recebe 2 valores, no caso a conexao e o id do cliente para que possa ser feito o select automaticamente!!!

Agora esta dando erro justamente na classe que esta repaçando esses valores!!

Oque eu deve passar para ela??

Obrigado pela Atençao, segue o codigo a baixo!!!

O erro se encotra na seguinte linha: atual = new Cliente (atualIds.getInt(1), con);

public CadastroClientes(ConSQL con)
{
        this.con = con;
                
        try
        {
            atuaIds();
            if (atualIds.first())
            {
                atual = new Cliente(atualIds.getInt(1), con);
            } 
            else 
            {
                atual = new Cliente(con);
                novo = true;
            }
                
        } 
        catch (SQLException e) 
        {
            e.printStackTrace();
        }
        
        initComponents();
Diego_Silveira

então cara, qual o erro? Você implementou os dois construtores na classe Cliente?

Preciso ver melhor qual é o erro, ok?

Abraço…

ViniGodoy

Argh… não use Vector, use ArrayList.

É só mudar a criação para:

List<MeuBean> lista = new ArrayList<MeuBean>();

No resto, é tudo igual.

O ArrayList não é sincronizado. Isso evita desperdício de recursos. A interface dele também é mais enxuta e padrão. Você ainda pode usar recursos poderosos como os da classe Collections (como substituir o ArrayList por um wrapper de sincronização ou de imutabilidade, se necessário).

Hoje em dia não tem porque usar as classes antigas, Vector e Hashtable, que nem sequer eram da Collections Framework.

smkk

cara… vou dar uma dica… do geito que você está implementando este código me parece que ele executa muitas queries separadas!!

ao invés de vincular sua classe de modelo (Cliente) diretamente com a persistência (Conexões nas bases de dados), talvez você poderia implementar uma classe somente para cuidar da persistência e criar uma lista de VO’s (Clientes) que na parte de apresentação (sua paginação) seriam manipulados sem nenhum vínculo com a persistência.

espero que você tenha entendido a idéia…

  • retire as dependências do banco de seu modelo (classe Cliente).
  • crie uma camada de persistência.
Criado 14 de outubro de 2007
Ultima resposta 16 de out. de 2007
Respostas 5
Participantes 4