Verificar se uma variavel tem valor?

7 respostas
F

Salve galera

Eu tenho uma consulta sql simples, e quero saber se a minha variavel de armazenamento tem valor, para assim eu poder trata-la.
Seria mais ou menos assim.

Connection con = Conexao.getConnection();
preparedStatement stm = con.PreparedStatement("SELECT * FROM tabela");
ResultSet rs = stm.executeQuery();
if (rs) {}

Quando eu trabalhava com python fazia assim.

if (rs): // aqui eu sei q rs = true, que rs tem valor.
   condicoes

Assim o python verificaria se tem algo na variavel, mas em java num to conseguindo fazer isso.

ja tentei varias coisas

rs.lenght
rs.getLenght
if(rs)

E nada ainda…
Minha ultima tentativa antes de postar aqui foi (rs.next()) é true, e da pra saber que rs tem um valor, porem no select ele começa pelo segundo registro, o que fica tenso…rs !

tentei isso com rs.next()

if (rs.next()){
   while (rs.next()){
       System.out.println(rs.getString("field"));
   }

Isso funciona, da pra saber que rs tem um valor e e true, porem no while ele comeca pelo segundo registro, o q eu ainda naum entendi o pq…rsrs !!!

Espero que tenham entendido o que estou buscando,obrigado !

7 Respostas

E

Não precisa do if (rs.next), pois o próprio while já verifica isto. Se não houver nenhum registro, o retorno será false e o que estiver no bloco do while nem será executado.

A questão de iniciar no segundo registro ocorre porque quando é feito um rs.next no if, assim carrega o primeiro registro. Logo em seguida é feito um rs.next no while, que vai para o segundo registro.

F

o ResultSet é como um cursor de um banco de cados, quando vc chama o next ele vai para o proximo registro, no caso seu while deve ser sobre o next, ou vc pode tratar da seguinte maneira

if(rs.next()){//Foi pro primeiro registro
  //Faço algo com a primeira linha
  while(rs.next()){//Aqui ja é o segundo
     //continuo processando as outras linhas
  }
}

o resultSet é muito falho quanto a isso, vc poderia executar um count(*) na base antes de processar para garantir que existe alguma coisa.

R

maior que zero não funciona aí?

0 …

F

No caso eu precisaria de algum metodo do ResultSet que me retornasse um valor inteiro do bd, algo como o numero de registros, algo assim…O que eu quero fazer é mais ou menos com o pseudocodigo que vou exibir.

if(rs.lenght > 0){ //verifica tamanho do ResultSet rs
     //da select no banco
     while(rs.next()){}
}else{
     //da insert no banco
}

Tem algum metodo que retorne um valor inteiro do bd ??? To tentando uns aqui, mas ainda num consegui.

N
rs.length()

Retorna o número de tuplas selecionadas.

rs.next()

Retorna a próxima tupla que você poderá trabalhar com os dados.

rs.getString("NomeDaColuna");
ou
rs.getString(1);

Retorna a string da coluna com o nome especificado ou a string que está na coluna 1(segundo exemplo).

rs.getInt(); // retorna inteiro
rs.getLong(); // retorna long
rs.getString(); // retorna String
rs.getDate(); // retorna um Date
rs.getObject(); // retorna um Object
// E por aí vai...
J

Explique melhor sua dúvida, pois o que entendi que precisa seria isto.

Integer registros = 0;
while(rs.next()){
     registros++;
}
if(registros == 0){
     // INSERT NO BANCO
}
F

bem galera, usei absolute(int) para conseguir o q precisava.

vejam:

Connection con = Conexao.getConnection();
     PreparedStatement stm = con.PreparedStatement("SELECT * FROM tabela");
     ResultSet rs = stm.executeQuery();

     if(rs.absolute(1)){ //verifica se existe pelo menos um registro na tabela
          while(rs.next()){
              rs.getString("field");
          }
     }else{
         insert tabela
     }

Num sei se e a melhor forma pra fazer, mas por enqto deu certo…

abraço e obrigado a todos.

Criado 20 de outubro de 2010
Ultima resposta 20 de out. de 2010
Respostas 7
Participantes 6