Login

Por favor alguem me ajude eu ja fiz este codigo e ele acede á base de dados, o problema é que qualquer pessoa entra mesmo que nao
esteja inscrita na base de dados, ja andei muito as voltas mas nao consigo fazer com que o login seja de facto de clientes que estejam na base de dados

[code] try {

        Class.forName("com.mysql.jdbc.Driver");
    } catch (ClassNotFoundException ex) {
        Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
    }

    Connection conn;
    try {
        conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1/cliente", "root", "");
    } catch (SQLException ex) {
        System.out.println("Não foi possivel aceder ao mysql!");
    }

  if (txtusername.getText().equals("") || txtpassword.getText().equals("")) {
     JOptionPane.showMessageDialog(null, "Deve introduzir username e password!");
     
   } else {

//AGORA AQUI ESTÁ MEU PROBLEMA, COMO FAÇO PARA VALIDAR USERNAME E PASSWORD???
//visto que tem que procurar na base de dados e ver se existe mxm essa password e username

     String sql = "select * from login where Username='" +txtusername.getText()+ "' and  Password= '"+ txtpassword.getText()+"'";  
        
     JOptionPane.showMessageDialog(null, "Username ou Password incorreta");


     JOptionPane.showMessageDialog(null, "Bem vindo!");
    }
  }[/code]

O que vc precisa fazer é um método para verificar no banco, se o usuário existe ou não… pode ser um método booleano, se existir retorna true senão retorna false!

nao sei como faco isso, pk se for true vai pa outra janela, janela cliente

alem disso aquela string sql, deveria verificar e nao verifica, ou seja se eu meter
username: nnlnlnloiniono
password: iweoiwenoinwo

qualquer asneira que eu escreva diz sp k existe

Veja só Virgo.

  1. vc configurou conexão.
  2. vc valida se o usuário deixou de informar os dados.
  3. vc criou a sql.
  4. mas vc não fez o mais importante: fazer a consulta no banco.

Vc tem que instanciar um Statement, que é quem vai executar as consultas, e fazer a consulta.
Faça algo assim, dentro do if:

Statement st = conn.createStatement(); //instância do statement
boolean retorno = st.executeQuery(sql); // executa a consulta e retorna true se teve retorno.

if (retorno){
//mensagem ok
}else{
//mensagem ero
}

vc tb pode fazer algo mais direto:

Statement st = conn.createStatement(); //instância do statement

if (st.executeQuery(sql)){ // executa a consulta e retorna true se teve retorno.
//mensagem ok
}else{
//mensagem ero
}

Dê uma olhadinha na API do Statement, seus métodos e retornos.

Abcs

Este select que vc está dando no banco não verifica se existe ou não um usuário… segue exemplo de um método que verifica se existe usuário ou não:


public boolean verificaUsuario(Usuario usuario) {

		String sql = "SELECT * FROM tabela WHERE usuario = ? AND senha = ?";

		if (usuario == null) {
			throw new IllegalArgumentException("Usuário não pode ser nulo");
		}

		try {
			PreparedStatement stmt = this.conexao.prepareStatement(sql);
			
                        // stmt...


			ResultSet rs = stmt.executeQuery();

			boolean encontrado = rs.next();
			rs.close();
			stmt.close();

			return encontrado;
		
        } catch (SQLException e) {
  	         throw new RuntimeException(e);
	}
}

muito obrigada aos 2, vou tentar fazer =) muito obrigada mesmo valeu :slight_smile:

Não concordo com ppro11

Esse Select pode sim encontrar um usuário numa tabela do banco (pelo que entendi, ela tem uma tabela para esses).

String sql = "select * from login where Username='" +txtusername.getText()+ "' and  Password= '"+ txtpassword.getText()+"'";
//login = nome da tabela
//Username e Password = nome das colunas

A diferença é que vc fez com PreparedStatement e ela tá atribuindo direto o valor digitado à string.

Dá certo sim, Virgo. As duas formas. Vc só terá configurar exatamente para seu caso que tratar os retornos do Banco.

Abcs.

Agora, se for pra pegar um usuário DO BANCO, e não de uma TABELA, tem que ver a documentação do banco. Em mySql não posso ajudar.
Abraços

berg.pb o que eu quis dizer é que ela estava apenas executando um select, não verificando se existia ou não o usuário… haja visto que no código de exemplo que eu coloquei eu fiz o mesmo SELECT que ela estava fazendo…

Sem um método (booleano) que verifique se existe, ou não um usuário, e que retorne true ou false, a querie SELECT… de nada adianta

String sql = "SELECT * FROM tabela WHERE usuario = ? AND senha = ?";

Boa Sorte a todos e espero ter ajudado!

Fala ppro11

Eu entendi o que vc quis dizer. A questão eh que o que a autora fez foi somente montar a String do sql, mas sequer tinha jogado na conexao. Por isso que na minha 1a resposta eu citei o Statement e sua Api.

Td blz? :slight_smile:
Abcs.

Tudo certo berg.pb… na resposta onde eu coloquei o método de exemplo, quando eu escrevi que apenas o SELECT não verificava, era para a autora da pergunta e não para a sua resposta… pode ser isso que ficou meio confuso! mas no final acho que tanto eu quanto você fizemos a mesma coisa, e ajudamos de alguma forma!

abraço!