Varrendo o banco de dados e comparando com um valor

2 respostas
MiguelCP

Bo noite pessoal, estou com uma dúvida com minha lógica e queria que alguém me auxiliasse.

Estou com o código para varrer no banco um coluna e quero que o valor que digitei já existe ou não se exitir no campo numerico ele irá adicionar mais um, essa é a ideia. o código é o seguinte:

public String ValidaSerie()throws SQLException{
    String NewNserie;
     PreparedStatement st;
     ResultSet rs = null;
     Connection Conn = Conexao.getConnection();    
 try{
          st = Conn.prepareStatement("Select nserie from serie ");
          st.execute();
          rs = st.executeQuery();
          while(rs.next()){
              NewNserie = rs.getString(nserie);
              }
                   if (NewSKU.equals(SKU)){
                         cont += 1;
                         Nserie = tamanho + fk_cor.substring(0,1).toUpperCase() +fk_produto.substring(0,2).toUpperCase() + descricao_serie.substring(0,2).toUpperCase() + cont;
                        JOptionPane.showMessageDialog(null, "Novo Nserie é: "+Nserie);
                       } return Nserie;
         }System.out.println("Selecionado com Sucesso!");
             st.close();
            Conn.close();
                 catch (Exception e){
                  e.printStackTrace();
                                              }
                   return "OK";
 }

Alguém poderia ajudar?

2 Respostas

A

MiguelCP, nós vamos te ajudar, mas para isso você precisa nos ajudar a te ajudar:

  • Tente postar um código identado, mesmo com as tags code tá dificil acompanhar

  • Você poderia comentar cada linha descrevendo sua intenção e em como ela se aplica com sua lógica?

Por último, estude sobre a clausula WHERE no SELECT, talvez facilite sua vida.

discorpio

Boa noite a todos.

Em primeiro lugar, acho que voce não vai gostar de ver a sua aplicação rodar lentamente, isto porque está [color=red]“varrendo”[/color] o seu banco de dados. Como assim :?:

Imagine se a sua tabela possui exatamente 1.456.123.099 registros. :shock: Agora imagine a aplicação ter que navegar linha por linha para tentar encontrar um registro específico. :roll:

Se voce tem o valor da série e quer saber se ela existe na tabela, então porque não tentá-la encontrá-la diretamente na instrução SQL, desta forma:

st = Conn.prepareStatement("Select nserie from serie where nserie = SKU");

Com o comando acima, o SQL consegue encontrar o registro em questão de 5 segundos para uma tabela que tem mais de um milhão de registros, isto por causa do sistema de indexação que o SQL usa para navegar no seus registros, e 5 segundos praticamente já considerado uma eternidade em se tratando de TI.

Se o registro existir, o ResultSet retornado conterá apenas uma única linha de registro, ficando mais leve até para circular numa transação em rede. Assim sendo se ele estiver na tabela e só somar mais um, um lógica simples, e mais eficiente.

Se não, imagine a sua lógica logo empacada na primeira instrução tentando carregar um ResultSet com um milhão de registros e tentar circular isto numa transação na rede :x :frowning: :cry:

Se conseguir isto depois de quase um hora, voce tentar reconhecer o registro navegando um por um em quase mais de uma hora. :cry: :oops: :evil:

Assim sendo o seu código ficaria melhor assim:

public Integer ValidaSerie(Integer nserie) throws SQLException {    
     PreparedStatement st;  
     ResultSet rs = null;  
     Connection Conn = Conexao.getConnection();       
     st = Conn.prepareStatement("Select nserie from serie where nserie = " + nserie);    
     rs = st.executeQuery();  
     if (rs.next()){  
             nserie++;
             System.out.println("Série encontrada e incrementada"); 
     } else `
             System.out.println("Série não encontrada");
     }
     return nserie
}

Repare que o seu código ficou até mais enxuto, deixando a sua aplicação mais rápida e eficiente 8) :slight_smile: :smiley:

Criado 17 de março de 2011
Ultima resposta 18 de mar. de 2011
Respostas 2
Participantes 3