Dúvida com ResultSet

Utilizei algumas dicas do pessoas do GUJ, mas continuo nao conseguindo utilizar o metodo .last() de um resultset…

fiz as alterações para trabalhar com preparedStatement, mas
quando executo o comando, continuo obtenho uma exception:

Erro: Operacao invalida para encaminhar apenas conjunto de resultado

o meu códido é este…

alguém pode dar uma força?

valeu

[code]try{

      Class.forName("oracle.jdbc.driver.OracleDriver");
      conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:XE", "HR", "HR");
                          
    }
    
    catch(ClassNotFoundException e){
        JOptionPane.showMessageDialog(null, "Erro na carga da classe. Erro: " + e.getMessage(), "Cadastro de Alunos", JOptionPane.ERROR_MESSAGE);                             
        System.out.println("Erro na carga da classe. Erro: " + e.getMessage());
    }
    catch(SQLException e){
        JOptionPane.showMessageDialog(null, "Erro na conexao. Erro: " + e.getMessage(), "Cadastro de Alunos", JOptionPane.ERROR_MESSAGE);                                        
    }
    catch(NoClassDefFoundError e){
        JOptionPane.showMessageDialog(null, "Erro: " + e.getMessage(), "Cadastro de Alunos", JOptionPane.ERROR_MESSAGE);                                        
    }

try{

       //pstmt = conn.prepareStatement("SELECT * FROM FUNCIONARIOS",ResultSet.FETCH_FORWARD);
        pstmt = conn.prepareStatement("SELECT * FROM FUNCIONARIOS");
       
       rs = pstmt.executeQuery();        
        if(rs.last()){
           txtCodigo.setText(String.valueOf(rs.getInt("MATRICULA")));
           txtNome.setText(rs.getString("NOME"));      
        }
    }
    catch(SQLException e){
        JOptionPane.showMessageDialog(null,"Erro: " + e.getMessage(), "Mensagem de Erro", JOptionPane.ERROR_MESSAGE);    
    }
   [/code]

Pelo que eu entendi tu estás fazendum if com o last() pra saber se só foi recuperado um único registro, correto? Para isto, acho que você deve usar o seguinte:

rs.first();

if (rs.isLast())
  {
   txtCodigo.setText(String.valueOf(rs.getInt("MATRICULA")));
   txtNome.setText(rs.getString("NOME"));      
  }

tem também que verificar se teve resultado e if(rs.next){}

OLA,

o rs.next() eu uso normalmente,

o problema é com o last…

o que estou tentando fazer é colocar botões de navegação em um form para navegar em uma tabela (indo para frente, para tras, ultimo e primeiro)…

porem só .next() funciona os demais não

olha eu nunca usei esse comando .last() mas pelo seu código

if (rs.last())

ele irá retornar para tua aplicação true ou false…no caso se for true…ou seja vc esta no último resgistro e ele exibe … mas se não for o último registro…nada irá acontecer…

vc precisa amarrar sua lógica num while…

pelo menos foi o que eu entendi do seu código…

[/]'s

[quote=JavaAprendiz]OLA,

o rs.next() eu uso normalmente,

o problema é com o last…

o que estou tentando fazer é colocar botões de navegação em um form para navegar em uma tabela (indo para frente, para tras, ultimo e primeiro)…

porem só .next() funciona os demais não

[/quote]

Mas eu já te mandei a resposta pela MP você viu?

Pra navegar entre os registros do RecordSet você tem que dizer a ele que ele tem que ser “navegável” com as constantes dele.

Vá lá na MP e dê uma olhada na minha resposta…

pessoal,

deu certo, gracas a dica do juliano…

o segredo esta na hora de criar o statement …

como deve ser feito:

stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);

desta forma posso navegar a vontade utilizando os metodos last(),previous(),next(),first() do resultset que eu gero com o statement acima…

os botoes ficaram massa… :smiley:

value

Legal, mas coloca o exemplo como ficou, vai resolver muitas dúvidas.