Como saber se o sql encontrou um registro?

2 respostas
S

Olá tudo bem?

O problema é o seguinte:

1 - Utilizo o mesmo sql em várias classes, então, resolvi criar uma classe chamada Conexao para realizar esse sql e somente passar os parâmetros.

Então criei um método booleano, mas não sei como fazer para que ele me retorne true caso encontre o registro solicitado.

Como faço isso? A minha classe está logo abaixo (todo o código)

package servlets.venda;

import java.sql.*;

public class Conexao

{

Connection con;

PreparedStatement ps;

ResultSet rs = null;

boolean validado = false;
public boolean setValidaLogin(String login, String senha)
{		
		try			
		{
			Class.forName("org.gjt.mm.mysql.Driver").newInstance();
			con = DriverManager.getConnection("jdbc:mysql://localhost/vendas");
			ps  = con.prepareStatement("select * from usuario where login = ? and senha = ?");			
			ps.setString(1, login);
			ps.setString(2, senha);				
			rs = ps.executeQuery();
			
			try
			{
	        rs.next();  
	        validado = true;
	      }
	      catch(SQLException e)
	      { validado = false; }
	      
			rs.close();
			con.close();
	  } 
	  catch(SQLException e)
	  { }
	  catch(Exception e)
	  { }
	  return validado;
 }

}

2 Respostas

S

Já resolvi o problema, java é muito louco!

Bastou criar um atributo do tipo booleano e atribuí-lo de rs.next();

na classe que estou chamando fiz o seguinte:

Conexao conecta = new Conexao();

		if (conecta.setValidaLogin(login, senha) == false)
		{
				out.println( "<html> <head> <meta http-equiv= 'refresh' " + 
		  		    " content = '2; url = javascript:history.back();' " +
					 " &lt;/head&gt; <body bgcolor='#0080C0' text = 'white'> Você não possui permissão para esta sessão " + 
				    "</body>&lt;/html&gt;");
		}			 
		else .......

sacou a parada velhinho!

O código completo está logo baixo

package servlets.venda;

import java.sql.*;

public class Conexao

{

Connection con;

PreparedStatement ps;

ResultSet rs = null;

boolean validado = false;
public boolean setValidaLogin(String login, String senha)
{		
		try			
		{
			Class.forName("org.gjt.mm.mysql.Driver").newInstance();
			con = DriverManager.getConnection("jdbc:mysql://localhost/vendas");
			ps  = con.prepareStatement("select * from usuario where login = ? and senha = ?");			
			ps.setString(1, login);
			ps.setString(2, senha);				
			rs = ps.executeQuery();				
			validado = rs.next();				
			rs.close();
			con.close();
	  } 
	  catch(SQLException e)
	  { }
	  catch(Exception e)
	  { }
	  return validado;
 }

}

fenrir

Só um adendo… :slight_smile:

O bloco try ficaria bem melhor assim:

try &#123; Class.forName&#40;&quot;org.gjt.mm.mysql.Driver&quot;&#41;.newInstance&#40;&#41;; con = DriverManager.getConnection&#40;&quot;jdbc&#58;mysql&#58;//localhost/vendas&quot;&#41;; ps = con.prepareStatement&#40;&quot;select * from usuario where login = ? and senha = ?&quot;&#41;; ps.setString&#40;1, login&#41;; ps.setString&#40;2, senha&#41;; rs = ps.executeQuery&#40;&#41;; validado = rs.next&#40;&#41;; &#125; catch&#40;SQLException e&#41; &#123; e.printStackTrace&#40;&#41;; &#125; catch&#40;Exception e&#41; &#123; e.printStackTrace&#40;&#41;; &#125; finally &#123; rs.close&#40;&#41;; con.close&#40;&#41;; &#125; return validado;

Porque colocar o e.printStackTrace: se ocorrer uma exceção você jamais saberá qual é! Pelo menos, deve exibi-la na saída de erro padrão.

Porque fechar o acesso ao banco no finally: se ocorrer algum erro na execução da sentença, por exemplo, o banco de dados ficará aberto aqui até o garbage collector se dignar a passar, o que pode demorar um bocado, e fazer com que novas conexões não sejam mais possíveis, já que o limite teria sido atingido.

E mais uma coisinha…não é uma boa prática usar o asterisco (*) na sentença SQL! Coloque o nome de pelo menos um campo. Se a tabela tiver 50 campos, com o asterisco, você estará pegando um registro com os 50 campos, sendo que, na prática, não precisa de nenhum!

Criado 26 de outubro de 2003
Ultima resposta 26 de out. de 2003
Respostas 2
Participantes 2