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;
}
}
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();' " +
" </head> <body bgcolor='#0080C0' text = 'white'> Você não possui permissão para esta sessão " +
"</body></html>");
}
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
Outubro 26, 2003, 10:15pm
#3
Só um adendo…
O bloco try ficaria bem melhor assim:
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();
} catch(SQLException e) {
e.printStackTrace();
} catch(Exception e) {
e.printStackTrace();
} finally {
rs.close();
con.close();
}
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!