por acreditar que o uso desta função cairia bem na minha aplicação, visto que é somente para verificar se o usuário existe no banco e se é somente um, gostaria de uma dica de como utilizar esta função na aplicação. Fiz alguns testes mais o que era retornado era a quantidade de registros, sempre igual a 1, mesmo que eu tivesse mais de um usuário no banco com o mesmo login e senha. De fato, ele somente trará um registro, que é o registro que informa a quantidade. Eu gostaria de pegar essa quantidade que é retornada e não a de registro.
SELECT COUNT (*) AS CONTAGEM FROM TABELA WHERE USUARIO = 'usuario'
E você pegaria o valor da “pseudo-coluna” CONTAGEM.
[/quote]
OK… o cógigo está assim…
try
{
String sqlCount = ("SELECT * FROM TBALUNO WHERE MATRICULA = ? AND SENHA_ALUNO = ?"); // no lugar do Select * , usar Select //Count(*)
stmt = conexao
.prepareStatement(sqlCount);
stmt.setString(1, aluno.getMatricula());
stmt.setString(2, aluno.getSenha());
ResultSet rs = stmt.executeQuery();
rs.last();
int count = rs.getRow(); // usando com o count(*), só resulta em 1, independete de quantos registros tenha
rs.beforeFirst();
System.out.println("Quantidade de regitros: " + count);
if (count == 1)
{
String nome= "", matricula = "";
while (rs.next())
{
nome = rs.getString("NOME_ALUNO");
matricula = rs.getString("MATRICULA");
}
aluno.setNome(nome);
aluno.setMatricula(matricula);
return aluno;
}
else
{
return null;
}
}
catch (SQLException e)
{
System.out.println(e.getMessage());
}
finally
{
try
{
stmt.close();
conexao.close();
}
catch (Exception e)
{
System.out.println(e.getStackTrace());
}
}
}
Consegui implementar usando o Select *, depois de muitas tentativas. Agora, o usuário só loga se tiver apenas um único registro na tabela. Sei que podemos implementar a integridade no atributo, más num custa nada implementar mais uma segunrança né…
[code] String sqlCount = ("SELECT COUNT() AS QTDE FROM TBALUNO WHERE MATRICULA = ? AND SENHA_ALUNO = ?"); // no lugar do Select * , usar Select //Count()
stmt = conexao
.prepareStatement(sqlCount);
stmt.setString(1, aluno.getMatricula());
stmt.setString(2, aluno.getSenha());
ResultSet rs = stmt.executeQuery();
int retorno = rs.getInt("QTDE"); // se for 1 é válido
[/code]
Porém você tá retornando o aluno no seu método, ou seja, depois de verificar se é válido você vai no BD novamente para carregar suas informações???
Meu amigo, o banco tem que ser persistente por si só…
Então aconselho que vc coloque o teu login como chave primária, logo vc evita que no banco sejam inseridos usuários com mesmo login…
Ou, caso vc já tenha uma chave primária numérica, use a diretiva UNIQUE…
[quote=Rodrigo Rocha de Moraes]Meu amigo, o banco tem que ser persistente por si só…
Então aconselho que vc coloque o teu login como chave primária, logo vc evita que no banco sejam inseridos usuários com mesmo login…
Ou, caso vc já tenha uma chave primária numérica, use a diretiva UNIQUE…
[]'s
[/quote]
Pois é Rodrigo… tb concordo com vc… más n se pode deixa nenhuma possibilidade de erro… ou pelo menos tentar…
Tranquilo vei!
Concordo que não devemos deixar brechas tanto no BD quanto na aplicação pois sabemos que usuário é usuário… haha
Mas desta forma vc evita de usar o COUNT(*), pois terá certeza de que se a consulta trouxer alguma linha, ela será única!