Como saber se o comando select retornou alguma coisa

Quando executarmos o método que faz uma query com select como podemos saber se o resultset está vazio? Ou seja, nenhum registro foi encontrado. Isto dentro do seguinte código:

            try {
                this.executarSQL(
                        "SELECT "
                        + "id_cgc_cpf, "
                        + "nome_razao, "
                        + "telefone, "
                        + "cidade, "
                        + "estado "
                        + "from fornecedores "
                        + "where id_cgc_cpf = " + modelCadForProduto.getId_fornecedor());

Observe que ele chama um método executarSQL(…select…), esse método é dado abaixo:

 public boolean executarSQL(String pSQL){
        try {
            //createStatement de con para criar o Statement
            this.setStatement(getCon().createStatement());

            // Definido o Statement, executamos a query no banco de dados
            this.setResultSet(getStatement().executeQuery(pSQL));
            
        } catch (SQLException ex) {
            ex.printStackTrace();
            return false;
        }
        return true;
    }

Eu não quero modificar o método executarSQL, gostaria de aplicar algum método ao getResultSet() que me dissesse se o resultset está vázio, melhor ainda se disser se a pesquisa resultou em registros.
E aí, pessoal do GUJ, como eu faço?

Atenciosamente,
Ronaldo

Sem modificar, né? Bom, vc pode mostrar o método setResultSet?

Mas no geral, para saber se há resultados, vc pode invocar o método ResultSet.next() uma vez, se for false é porque está vazio, caso contrario, ele possui pelo menos um resultado e vc pode usar um do-while para processá-lo. Olha só:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Main {
  public static void main(String... args) {
    try (
      Connection conn = DriverManager.getConnection("jdbc:h2:./contacts");
      Statement statement = conn.createStatement();
      ResultSet result = statement.executeQuery("SELECT * FROM contacts");
    ) {
      if (!result.next()) {
        return; // ResultSet vazio.
      }

      do {
        // ResultSet tem pelo menos 1 resultado, aqui vc processa.
        System.out.println("Resultado: " + result.getString(1));
      } while (result.next());
    } catch (SQLException e) {
      e.printStackTrace();
    }
  }
}
1 curtida

Deu certinho, mas eu usei o if ao invés do while. Era mais conveniente. Muito obrigado!

Atenciosamente,
Ronaldo

1 curtida

@anyblueangel3 Usando while seria para os casos onde o resultado retornado for mais de 1 registro.

1 curtida

De fato, sempre tem um registro único…

Por isso que pedi para ver o método setResultSet, para poder ajudar de forma mais assertiva.

Mas mesmo com apenas 1 resultado, é bem parecido, dá pra fazer só com o if mesmo. Algo tipo assim:

if (result.next()) {
  // Processa o resultado.
} else {
  // Avisa de alguma forma que está vazio.
}

Esse “Avisa de alguma forma” vai depender de como vc implementou ou vai implementar o método.

1 curtida