Ajuda com Erro em resultset.next() (RESOLVIDO)

10 respostas
samuk1

Boa Tarde! É um erro dificil de explicar mais vou fazer o maximo!

Tenho uma tela com infomaçoes do Cadastro de clientes. Quando clico no botao "altera" para alterar alguma informação do cliente eu uso o filtro ao listar as informações do cliente atual:
c_dados.executeSQL("select * from membros where codigo = "+tf_codigo.getText()+" order by "+ordenacao);

Ou seja eu mando listar as informações onde o codigo for igual ao código que está no jtextfield.
Dai depois de o cliente alterar ao informações , faço o update:

String sql ="UPDATE membros SET "+
            "nome ='"       +tf_nome.getText()+"',"+
            "endereco ='"   +tf_ender.getText()+"',"+
            "cidade ='"     +tf_municipio.getText()+"',"+
            "setor ='"      +tf_setor.getText()+"',"+
            "complemento ='"+tf_comple.getText()+"',"+
            "cep ='"        +funcoes.numero(tf_cep.getText())+"',"+
            "fone2 ='"      +funcoes.numero(tf_fone2.getText())+"',"+
            "rg ='"         +tf_rg.getText()+"',"+
            "fone1 ='"      +funcoes.numero(tf_fone1.getText())+"',"+
            "cel1 ='"       +funcoes.numero(tf_celular1.getText())+"',"+
            "cel2 ='"       +funcoes.numero(tf_celular2.getText())+"',"+
            "cpf ='"        +funcoes.numero(tf_cpf.getText())+"',"+
            "numero ='"     +tf_numero.getText()+"',"+
            "email ='"      +tf_email.getText()+"',"+
            "obs1 ='"       +tf_obs1.getText()+"',"+
            "obs2 ='"       +tf_obs2.getText()+"',"+
            "categoria ='" +cb_categoria.getSelectedItem()+"',"+
            "operadora1 ='"+cb_celular1.getSelectedItem()+"',"+
            "operadora2 ='"+cb_celular2.getSelectedItem()+"',"+
            "tipo1 ='"     +cb_fone1.getSelectedItem()+"',"+
            "tipo2 ='"     +cb_fone2.getSelectedItem()+"',"+
            "uf ='"        +cb_uf.getSelectedItem()+"',"+
            "membro = "    +membro+" ,"+
            "suspenso ="   +suspenso+" ,"+
            "nascimento =" +nascimento+" ,"+
            "batismo ="    +batismo+
            " where codigo ="+tf_codigo.getText()+"";
       
        c_dados.statement.executeUpdate(sql);
        JOptionPane.showMessageDialog(null,"Alteração realizado com sucesso!");

Dai tenho que atualizar o resultset para voltar na tela normal de clientes e listar os mesmos!
Como eu quero que mostra exatamente esse cliente que eu alterei eu uso:

c_dados.executeSQL("select * from membros where codigo = "+cod+" order by "+ordenacao);
       c_dados.resultset.first();
Onde o "Cod" foi o codigo do cliente que eu alterei. Até ai beleza! Mais quando eu mando ir para o proximo registro ou anterior:
resultset.next() ou resultset.previous()

Ele da o erro que não existe proximo registro(ou anterior) Acredito eu porque eu filtrei o resultset.

Dai vem a duvida que me consome! Como Atualizar o Resultset para que ele volte no determinado registro e aceite dar o Next e o previous :?:

Desculpe se foi confuso... mais é o que eu puder fazer!

Abraços... :D

10 Respostas

Andre.flu

Jovem,

Tenta ao invés de fazer c_dados.resultset.first();

tente fazer: c_dados.resultset.next();

Como o resultado esperado é unico o next já posiciona o cursor na unica linha, caso vc de outro next uma exceção será lançada;

Em resumo:

if( rs.next() ){
// obtem aqui os dados da linha retornada.
}

Att.

André Cunha

samuk1

Boa Tarde André! Obrigado por responder!

Se sua ideia foi dar o next logo apos a atualizar o resultset:

c_dados.executeSQL("select * from membros where codigo = "+cod+" order by "+ordenacao); c_dados.resultset.next();

não deu certo… :frowning:

Andre.flu

Jovem,

Tentar fazer assim:

try {
    
Statement stmt = connection.createStatement();
    ResultSet rs = stmt.executeQuery("SELECT * FROM my_table where cod =" + codigo );

    // Fetch each row from the result set
    if (rs.next()) {
        // Get the data from the row using the column index
        String s = rs.getString(1);

        // Get the data from the row using the column name
        s = rs.getString("col_string");
    }
} catch (SQLException e) {
}
samuk1

Ola André?

Poderia me explicar!?

Não entendi Onde eu usaria isso? Ainda mais pq tem row e column… no meu não tem isso, não é uma Jtable!

Abraços!!!

Andre.flu

Vc deve ir preenchendo seu JTable com as rows e colums.

O while vai te dar cada linha e dentro dele vc vai colocando as colunas com os dados.

Fim da transmisão.

samuk1

Não amigo… Acho que vc não entendeu!
Não existe nenhuma Jtable! Eu tenho uma tela com campos Jtextfiled!
Em relação a preencher eles com os dados do banco de dados eu não tenho duvida!

O problema é dar um next apos um filtro! Leia acima…

Abraços!

Andre.flu

Entrando no detalhe do código, veja é um if só irá executar uma vez, já que estamos esperando apenas uma linha, dentro deste if vc preenche seus campos.

Fim da linha.

samuk1

¬¬ ta Amigo… Esquece! Você Realmente não entendeu minha duvida Inicial!

Alguem Mais pode me ajudar!?

Abraços

Andre.flu

Pegue seu resultset e de um beforeFirst

rs.beforeFirst();

void beforeFirst()
Moves the cursor to the front of this ResultSet object, just before the first row.

http://docs.oracle.com/javase/6/docs/api/java/sql/ResultSet.html

samuk1

Desculpe André Mais Suas Tentativas foram falhas!
Esse BeforeFirst() é totalmente fora!

Mais Vc me ajudou em algo… \o/

Com esse Link eu estudei e descobri!

Quando clico em alterar o cliente eu pego o numero da row que está o Resultset! Assim:

int row = c_dados.resultset.getRow();

Dai quando eu termino o Update, eu atualizo o resultset normal mando ele ir pro first(), e mando ele ir para a Row que eu tinha pegado! Assim:

c_dados.executeSQL("select * from membros"); c_dados.resultset.first(); c_dados.resultset.absolute(row);

E Acabarão-se meus Problemas! :smiley:

Obrigado André por tentar!

Criado 12 de dezembro de 2011
Ultima resposta 13 de dez. de 2011
Respostas 10
Participantes 2