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.
E você pegaria o valor da “pseudo-coluna” CONTAGEM.
OK… o cógigo está assim…
try{StringsqlCount=("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());ResultSetrs=stmt.executeQuery();rs.last();intcount=rs.getRow();// usando com o count(*), só resulta em 1, independete de quantos registros tenhars.beforeFirst();System.out.println("Quantidade de regitros: "+count);if(count==1){Stringnome="",matricula="";while(rs.next()){nome=rs.getString("NOME_ALUNO");matricula=rs.getString("MATRICULA");}aluno.setNome(nome);aluno.setMatricula(matricula);returnaluno;}else{returnnull;}}catch(SQLExceptione){System.out.println(e.getMessage());}finally{try{stmt.close();conexao.close();}catch(Exceptione){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é…
O que vcs acham ?
rafaelglauber
Oi,
O código ficaria mais ou menos assim:
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
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???
jayro
Cara… vou testar e depois posto aqui o result…
Valeu.
Rodrigo_Rocha_de_Mor
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
jayro
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
Pois é Rodrigo… tb concordo com vc… más n se pode deixa nenhuma possibilidade de erro… ou pelo menos tentar…
Rodrigo_Rocha_de_Mor
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!