Problema validação login/senha cm MySQL

galera… tenho o seguinte codigo:

esse que implementa a ação do botão:

[code]b1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
String login = tLogin.getText();
String senha = tSenha.getText();
String query = “SELECT Login, Senha FROM login WHERE Login=’”+login+"’ and Senha=’"+senha+"’";

	if(confirma(query, senha, login) == 1){
		JOptionPane.showMessageDialog(null, "Senha e login corretos!");
	}
	
	else
		JOptionPane.showMessageDialog(null, "Senha e/ou login incorretos!");
		
tLogin.setText("");
tSenha.setText("");
	
}
});[/code]

e esse que e a ação da validação dos valores:

[code]public int confirma(String query, String senha, String login){

	Connection conexao = null; //gerencia a conexão
	Statement statement = null; //instrução de consulta
	
	try{
		
		Class.forName(JDBC_DRIVER); 
		
		conexao = DriverManager.getConnection(DATABASE_URL, "root", "");
		
		statement = conexao.createStatement();
		
		ResultSet resultSet = statement.executeQuery(query);
		
		
		while(resultSet.next()){
			String logindb = resultSet.getString(1);
			String senhadb = resultSet.getString(2);
			
			 if ((senha == senhadb) || (login == logindb)){
			 	return (1);
			 }
				 								 								
		}
		
	}
	
	catch (SQLException sqlException){
		sqlException.printStackTrace();
		System.exit(1);
	}
	
	catch (ClassNotFoundException classNotFound){
		classNotFound.printStackTrace();
		System.exit(1);
	}
	
	finally{ 
	
		try{
			statement.close();
			conexao.close();
		}
		
		catch(Exception exception){
			exception.printStackTrace();
			System.exit(1);
		}
	
	}
	return (0);
}[/code]

só q ele smp retorna 0… smp os dados estao errados…

algm sabe onde esta o erro no codigo?

vlw por td ai! []s

Substitua

    if ((senha == senhadb) || (login == logindb)){
        return (1);
}

por

    if ( (senha.equals(senhadb)) && (login.equals(logindb)) ){
        return (1);
}

String eh um objeto… e o operador “==” soh retorna true se ambas variaveis de referencia estiverem apontando para o mesmo objeto no heap.

Dica 1: este metodo poderia retonar um valor booleano…

    retun ((senha.equals(senhadb)) && (login.equals(logindb)))

Dica 2: evite usar concatenacao de strings para formar o seu sql… isto abre uma brecha de seguranca imensa na sua aplicacao… alguem pode fazer injecao de sql…

Espero ter ajudado.

Nadilson

Cara o pior que eu sei que isso é verdade, mas como fazer o SQL sem concatenar ? tens algum xemplo prático disso ?? pq complica principalmente quando se usa um JTextField… tem algum Design Patterns que resolva essa situação ?? valew cara…

Bem, em JDBC, voce pode fazer assim:

String sql = "select * from table where campo1 = ? and campo2 = ?";
PreparedStatement statement = conn.prepareStatement(sql);  
            
statement.setString(1, "valor campo 1");  //Tem setLong, setInte.. etc
statement.setString(2, "valor campo 2");

ResultSet rs = statement.executeQuery();

Espero ter ajudado…

Nadilson

mais setString nao eh para colocar valores na tabela??

[quote=cadu0220][quote=nadilsons]

statement.setString(1, "valor campo 1");  //Tem setLong, setInte.. etc
statement.setString(2, "valor campo 2");

[/quote]

mais setString nao eh para colocar valores na tabela??[/quote]

esse setString vc está passando os parametros da sua consulta…

o primeiro “?” da sua consulta vai receber o setString(1, “valor”);

exemplo:

select * from tblOi where nome = ?

qnd vc passa

stmt.setString(1, “cadu0220”);

a sua consulta ficaria assim:

select * from tblOi where nome = “cadu0220”

:wink:

sim mais a questao aqui não é colocar os valores…

eh validar eles… por isos msm q eu perguntei se setString eh pra isso…

setString implementa no banco os valores… nao valida eles

ahh tendi… vlww"

desculpa essa resposta depois… eh q qnd eu coloquei ela nao tinha a explicação certinha =)

vlw ai!

[]s

[quote=cadu0220]ahh tendi… vlww"

desculpa essa resposta depois… eh q qnd eu coloquei ela nao tinha a explicação certinha =)

vlw ai!

[]s[/quote]

sem erro! :wink: