Como saber quando o registro nao existe em um JDBC?

Colegas, faço a seguinte pesquisa em meu BD :

			stmt = con.prepareStatement(sb.toString());
			stmt.setInt(1,cliente.getMatSoc());
			stmt.setInt(2,cliente.getEmpSoc());
			rs = stmt.executeQuery();
			
			while(rs.next()){ 
				cliente = new ClienteVO();
				cliente.setNomeSoc(rs.getString(1));
				cliente.setMatSindSoc(rs.getInt(2));
.
.
.

Ou seja, ele faz a query e me traz o registro no While

Minha dúvida (que deve ser básica) é e quando ele não acha o registro ?
Entendo que ele não vai passar no While

Mas como devolvo pro Servlet mostrando que ele não passou no While ??

Tô meio na dúvida quanto a isso !!!

Teria outra alternativa ?

Obrigado

Bob

mas dai o seu rs sera == a null … ai vc sabera que ele nao obteve registros da base .

abraço

Sim legal

Mas é o seguinte :

Eu retorno o Bean do Objeto no meu método

public ClienteVO Le(ClienteVO cliente) throws SQLException{

e lá no finally eu faço :

		}finally{
			stmt.close();
			conex.Fecha_Conexao(con);
			return cliente;
		}

Lá no meu Servlet faço assim :

request.setAttribute("cliente",bco.Le(cliente));

Como que ficaria la no meu Servlet desta maneira que vc me falou ?

Desculpe as perguntas básica mas eu estou começando agora

Bob :oops:

[quote=overkill]mas dai o seu rs sera == a null … ai vc sabera que ele nao obteve registros da base .

abraço [/quote]

Incorreto. Se um resultSet é o retorno de um stmt.executeQuery, JAMAIS será nulo.

do Javadoc:

executeQuery
public ResultSet executeQuery(String sql)
throws SQLExceptionExecutes the given SQL statement, which returns a single ResultSet object.

Parameters:
sql - an SQL statement to be sent to the database, typically a static SQL SELECT statement
Returns:
a ResultSet object that contains the data produced by the given query; never null
Throws:
SQLException - if a database access error occurs or the given SQL statement produces anything other than a single ResultSet object

O problema é só saber se entrou no while ou não ? Se for crie uma variável boleana pra dizer se passou ou não, no final você verifica essa variável, se ela for verdadeira retorne o objeto cliente, senão retorne null, exemplo:

boolean found = false;

while(rs.next())
{
    found = true;
 ....


finally{   
    stmt.close();   
    conex.Fecha_Conexao(con);   
    if(found)
        return cliente;   
    else
        return null;
}  

[quote=fabiocsi][quote=overkill]mas dai o seu rs sera == a null … ai vc sabera que ele nao obteve registros da base .

abraço [/quote]

Incorreto. Se um resultSet é o retorno de um stmt.executeQuery, JAMAIS será nulo.

do Javadoc:

executeQuery
public ResultSet executeQuery(String sql)
throws SQLExceptionExecutes the given SQL statement, which returns a single ResultSet object.

Parameters:
sql - an SQL statement to be sent to the database, typically a static SQL SELECT statement
Returns:
a ResultSet object that contains the data produced by the given query; never null
Throws:
SQLException - if a database access error occurs or the given SQL statement produces anything other than a single ResultSet object

[/quote]

Tudo bem … nao me ative a documentacão amigo alem do que nao uso mais JDBC puro … quero dizer que caso venha vazio … ou seja

"rs == null " não ao pé do código hehe

mas se analizar caso o rs estiver vazio o while nao ir apercorer

while(rs.next())

entao mesmo assim seu return cliente ira ser nullo … saca so aplicar a logica … e contornar …

[quote=overkill][quote=fabiocsi][quote=overkill]mas dai o seu rs sera == a null … ai vc sabera que ele nao obteve registros da base .

abraço [/quote]

Incorreto. Se um resultSet é o retorno de um stmt.executeQuery, JAMAIS será nulo.

do Javadoc:

executeQuery
public ResultSet executeQuery(String sql)
throws SQLExceptionExecutes the given SQL statement, which returns a single ResultSet object.

Parameters:
sql - an SQL statement to be sent to the database, typically a static SQL SELECT statement
Returns:
a ResultSet object that contains the data produced by the given query; never null
Throws:
SQLException - if a database access error occurs or the given SQL statement produces anything other than a single ResultSet object

[/quote]

Tudo bem … nao me ative a documentacão amigo alem do que nao uso mais JDBC puro … quero dizer que caso venha vazio … ou seja

"rs == null " não ao pé do código hehe

mas se analizar caso o rs estiver vazio o while nao ir apercorer

while(rs.next())

entao mesmo assim seu return cliente ira ser nullo … saca so aplicar a logica … e contornar …

[/quote]

Nao entendi essa de aplicar a logica e contornar.
Pela sua afirmação muitos que lerem a thread irao axar que podem verificar se nao veio registros com a comparação if ( rs == null )
O q sempre retornara false, caso seja resultado de um stmt.executeQuery.

Postei isso pq ja houve tempos atras uma pessoa que ficou confusa pq ( rs == null ) sempre retornava false. Mesmo qdo nao vinha registros do banco.

heheeh é verdade … vou montar um exemplo do que quero mostrar e posto depois

Abraços

Colega, faz assim :

			rs = stmt.executeQuery();
			rs.next();
			if (rs.getRow()!=0){ // Achou o registro 
stmt = con.prepareStatement(sb.toString());
stmt.setInt(1,cliente.getMatSoc());
stmt.setInt(2,cliente.getEmpSoc());
rs = stmt.executeQuery();

if (rs.next()) {
	do { 
		cliente = new ClienteVO();
		cliente.setNomeSoc(rs.getString(1));
		cliente.setMatSindSoc(rs.getInt(2));
	} while (rs.next());
} else {
	throw new Exception("Registro não encontrado");
}

.       
.
.

cara sua resposta fui útil curta e objetiva parabens o amigo ai em cima deu mé volta na resposta que precisava dar pra mim foi blza vlw

Seria melhor ele retornar uma lista vazia e a camada de negócios acima decidir o que fazer com ela.

Persistência lançando exceção que não seja problema de conexão e banco é a maior fria.