Consulta o banco de dados - DAO[RESOLVIDO]

12 respostas
Enadrov

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.

12 Respostas

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

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.

Enadrov

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.

cido18

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?

Enadrov

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.

cido18

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

javax.swing.Daniel
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!" );
}
pmlm
javax.swing.Daniel:
if( rs.next() )
{
     while( rs.next() )
     {

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

cido18

Olá eu tenho um exemplo aqui:

public List<Cliente> lista() {
		String sql = "select * from cliente";
		List<Cliente> clientes = new ArrayList<Cliente>();
		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;
	}

Espero que ajude.

Enadrov

Ola cido18.
Assim funcionou, obrigado a todos

cido18

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

renanjp

(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 = ?";
Criado 16 de julho de 2012
Ultima resposta 18 de jul. de 2012
Respostas 12
Participantes 7