Botoes de navegação de registros postgresql [RESOLVIDO]

4 respostas
S

Ola pessoal

Estou com um nó no cerebro em como criar botões para navegar nos registros do Postgree

Botões:

Primeiro Registro
Próximo Registro
Registro Anterior
Ultimo Registro

para o "Primeiro registo eu utilizo da seguinte forma

"select banc_codigo, banc_nome from banco where banc_codigo >= 1 limit 1";

o Último registro eu u tilizo da seguinte forma

"select banc_codigo, banc_nome from banco order by banc_codigo DESC limit 1";

meu problema é nos botões

Próximo Registro e Registro anterior q nao faço ideia de como posso fazer

Agradeço a atenção de todos

4 Respostas

S

Mil desculpas eu esqueci de por o codigo de como estou tentando fazer os botões Próximo e Anterior.

Botão próximo registo

int reg = Integer.parseInt(txFuncCodigo.getText());  //pega o valor do "txFuncCodigo" Transforma em inteiro com o "parseint" e poe na variavel "reg"
        reg++;

        String sqlproximo = "select func_codigo, func_nome"
                + "from funcionario "
                + "where func_codigo >= " + reg + "limit 1";

        try {
            Connection conn = Conexao.getConexao();
            Statement st = conn.createStatement();
            ResultSet rs = st.executeQuery(sqlproximo); //executa consulta

            rs.next(); //envia os dados para a variavel "rs"
            txFuncCodigo.setText(rs.getString("func_codigo"));
            txFuncNome.setText(rs.getString("func_nome"));

        } catch (SQLException ex) {
            //JOptionPane.showMessageDialog(null, "Erro ao consultar Cliente \n" + ex.getMessage() + "\n" + ex.getCause());
        }

        if (txFuncCodigo.getText().equals("")) {
            JOptionPane.showMessageDialog(null, "Você está no último registro.");
        }

Botão Registro Anterior

int reg = Integer.parseInt(txFuncCodigo.getText());  //pega o valor do "txFuncCodigo" Transforma em inteiro com o "parseint" e poe na variavel "reg"

            reg--;

            String sqlproximo = "select func_codigo, func_nome"
                    + "from funcionario "
                    + "where func_codigo >= " + reg + "limit 1";

            try {
                Connection conn = Conexao.getConexao();
                Statement st = conn.createStatement();
                ResultSet rs = st.executeQuery(sqlproximo); //executa consulta

                rs.next(); //envia os dados para a variavel "rs"
                txFuncCodigo.setText(rs.getString("func_codigo"));
                txFuncNome.setText(rs.getString("func_nome"));

            } catch (SQLException ex) {
                //JOptionPane.showMessageDialog(null, "Erro ao consultar Cliente \n" + ex.getMessage() + "\n" + ex.getCause());
            }
S

demorei mas descobri.

Quero pedir desculpas para quem leu, acredito que nao me expressei bem

mas aqui esta a solução

int reg = Integer.parseInt(txFuncCodigo.getText());  //pega o valor do "txFuncCodigo" Transforma em inteiro com o "parseint" e poe na variavel "reg"
        reg++;

        String sqlproximo = "select func_codigo, func_nome from funcionario where func_codigo = " + reg;



        try {
            Connection conn = Conexao.getConexao();
            Statement st = conn.createStatement();
            ResultSet rs = st.executeQuery(sqlproximo); //executa consulta
            if (!rs.next()) {
                JOptionPane.showMessageDialog(null, "Você está no último registro.");
            } else {
                
                txFuncCodigo.setText(rs.getString("func_codigo"));
                txFuncNome.setText(rs.getString("func_nome"));
            }
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Erro ao consultar proximo \n" + ex.getMessage() + "\n" + ex.getCause());
        }
berg.pb

Olá SombraVargas.

Baseado no que vc postou, faço uma pergunta: um vez que todo clique nos botões será feita uma pesquisa no BD, do ponto de vista do usuário, será que não pode ficar lento essas rotinas?

Como, a partir do código que vc postou, vc seleciona as mesmas colunas de uma determinada tabela, penso que seria melhor fazer uma navegação off-line, o que deixaria a interação app-usuario mais rápida (dependendo, é claro, de diversos fatores).

Assim, uma sugestão que eu faço seria:

  1. ter uma Enum para os botões;
  2. ter uma variável global para controlar o índice de navegação.
  3. ter uma variável global com a lista resultante da pesquisa no BD.

Na abertura da tela, vc faria a pesquisa no BD uma única vez. O código abaixo leva em consideração a proposta acima, assumindo ‘registros’ como nome da lista, ‘index’ como controle de registros e ‘botoes’ como a Enum.

//variáveis globais
private int index;
private List registros;

private void navega(Botoes botao){
   switch (botao){
      case PRIMEIRO: 
      //*1 faz as validações e mensagens necessárias
      index = 0;
      break;
   case ANTERIOR: 
      // *1
      index--;
      break;
   case PROXIMO: 
      // *1
      index++;
      break;
   default: 
      // *1
      index = registros.size()-1;
      break;
   }

   txFuncCodigo.setText(registros.get(index).getCodigo());  
   txFuncNome.setText(registros.get(index).getNome());
}

Espero ter sido claro no que eu disse.
Espero poder ajudar.

Abraços

S

berg.pb agradeco as dicas n tinha pensado nisso.

esse eh meu primeiro sisteminha em java sei mt pouco, mas agradeço as dicas.

Criado 10 de janeiro de 2013
Ultima resposta 16 de jan. de 2013
Respostas 4
Participantes 2