Consulta o banco de dados - DAO[RESOLVIDO]

Gostaria de saber como identificar quando não achar a consulta no bando de dados, por exemplo

String sql = “select * from cliente where nome = ?”;

PreparedStatement stmt = con.prepareStatement(sql);

stmt.setString(1,nome);

ResultSet rs = stmt.executeQuery();

while(rs.next){
.
.
.
}

Como saber quando não encontrar os dados da consulta, ou seja, não encontrar dados com o nome consultado.

while(rs.hasNext())
{
.
.
.
}

Primeiro, use a tag [code] para postar código.
Segundo, sabe qual a função do while?
Em português, while é enquanto.
Ou seja, enquanto a sentença entre parênteses for verdadeira, aquele trecho de código dentro do laço se repete.
Ele se repetirá N vezes, desde que, a condição seja verdadeira já no início.
Ou seja, se while(rs.next()) for falso, ele nem executa este laço.

fiz sem o tag code pois estou no serviço e estava chegando gente aqui, foi não acontecerá de novo. Sei sim como funciona o while, porem mesmo quando testanto se for falso o rs.next(), não estou conseguindo verifica se a busca não acho o que procura.

Olá Enadrov,

Se eu entendi, você quer verificar um dado especifico no banco, dentro o while faça alguns ifs para filtrar a pesquisa.É essa a sua dúvida?

Ola , cido18.
Com este código eu consigo achar um determinado cliente pelo nome certo. Eu gostaria de criar um JOptionPane caso o cliente não seja encontrado falando, cliente não cadastrado. Porem não estou conseguindo determina quando o cliente não for encontrado.

Acredito que se você um do while seja melhor nessa ocasião, depois você faz um if para exibir a mensagem.

String sql = "select * from cliente where nome = ?"; 

PreparedStatement stmt = con.prepareStatement(sql); 

stmt.setString(1,nome); 

ResultSet rs = stmt.executeQuery(); 

if( rs.next() )
{
     while( rs.next() )
     { 
             // Comandos para recuperar os resultados do resultSet aqui.
     }
}else{
        JOptionPane.showMessageDialog( null, "Vishi tem nada!" );
}

[quote=javax.swing.Daniel][code]
if( rs.next() )
{
while( rs.next() )
{

[/code][/quote]

Ou um ou outro, os dois ao mesmo tempo não. Assim vai pular o primeiro registo.

Olá eu tenho um exemplo aqui:

[code]
public List lista() {
String sql = “select * from cliente”;
List clientes = new ArrayList();
PreparedStatement preparedStatement;
try{
preparedStatement = connection.prepareStatement(sql);
ResultSet resultSet = preparedStatement.executeQuery();
//Aqui!!!
while (resultSet.next()) {
clientes.add(populaPlano(resultSet));
}

		if(clientes.size() == 0){
			System.out.println("Entrou aki!!");
			JOptionPane.showConfirmDialog(null, "Vazio");
		}
		resultSet.close();
		preparedStatement.close();
	}catch(SQLException e ){
		e.printStackTrace();
	}
	return clientes;
}[/code]

Espero que ajude.

Ola cido18.
Assim funcionou, obrigado a todos

Enadrov se precisa de alguma coisa só postar, não esqueça depois de colocar o tópico como resolvido :smiley:

(dica)

Faz um metodo separado para popular um objeto com a tupla do rs…

ex:

         private List<seuObj> fillDelegate(ResultSet resultSet){
		List<seuObj> list = new ArrayList<seuObj>()resultSet;
		while (resultSet.next) {
			//......
		}
	}

Outra dica é fazer o mesmo para popular consultas parametrizadoas como essa:

String sql = "select * from cliente where nome = ?";