Como utilizar o COUNT(*) do SGBD MySql

Pessoal,

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.

Grato a todos.

:slight_smile:

Pode postar seu código pra gente ver?

Normalmente você faria algo como

SELECT COUNT (*) AS CONTAGEM FROM TABELA WHERE USUARIO = 'usuario' 

E você pegaria o valor da “pseudo-coluna” CONTAGEM.

[quote=thingol]Normalmente você faria algo como

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é… :wink:

O que vcs acham ?

Oi,

O código ficaria mais ou menos assim:

[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???

Cara… vou testar e depois posto aqui o result…

Valeu. :wink:

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=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… :wink:

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!

Até

[]'s