Erro ao comparar dados no BD[RESOLVIDO]

Boa Tarde, pessoal!!!
Estou construindo um projeto simples no qual este tem que verificar se o login e a senha que o usuário inseriu já está contida no banco, caso esteja, retorna o número identificador desta senha e login (ambos então contidos na mesma trupa da tabela).

Para teste, eu estou passando duas Strings para o método que verificará o login e a senha no banco:
Para estas duas estrings, eu já as tenho cadastradas no banco.

[code]import br.com.teletronix.conexao.Conexao;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

/**
*

  • @author vanessa
    /
    public class LoginDAO {
    /
    **********************************************

    • Faz consuta dos login`s e senhas do bd *

    *********************************************** /
    public int encontrarVendedora(String login, String senha) {

     Conexao.abrirConexao();
     String comando = "SELECT * FROM login l WHERE l.loginVendedora = " + login + "AND l.senha= " + senha;
     int comparaLoginVendedora = 0;
    
     try {
         PreparedStatement ps = Conexao.conexao.prepareStatement(comando);
    
         ResultSet rsDados = ps.executeQuery();
    
         while (rsDados.next()) {
             
             comparaLoginVendedora = rsDados.getInt("idLogin");
         }
         
         Conexao.fecharConexao();
    
     } catch (Exception e) {
         e.printStackTrace();
     }
    
    return comparaLoginVendedora;
    

    }

}[/code]
Porém o erro apresentado é: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘l.senha= 123a’ at line 1

No meu banco os atributos loginVendedora e senha estão declarados como VARCHAR(250).

Realizei o teste, inserindo uma nova trupa no banco contendo os valores de loginVendedora e senha = 1, alterei o método, fazendo com que o mesmo tenha seus parametros delarado como double : public int encontrarVendedora(Double login, double senha) e passei para o método dois números: IdVendedora = loginDAO.encontrarVendedora(1, 1);

Para este teste houve exito. Porém meu projeto deve executar com string e nao com double. Como eu resolvo este erro?
Grata!!!

Coloca um espaço antes do AND.

Você poderia ter jogado para uma string e ver qual a consulta está sendo formada.

Você fazendo concatenação de string, igual oq vc está fazendo, vocÊ está vulnerável ao sql injection.

[quote=jakefrog]Coloca um espaço antes do AND.

Você poderia ter jogado para uma string e ver qual a consulta está sendo formada.

Você fazendo concatenação de string, igual oq vc está fazendo, vocÊ está vulnerável ao sql injection.[/quote]
Ou a problemas com nomes como Louis McAdams e Joana DArc…
O mais adequado é você fazer uso do que o preparedStatement fornece.

String comando = "SELECT * FROM login l WHERE l.loginVendedora = ? AND l.senha = ? ";  
        int comparaLoginVendedora = 0;  
  
        try {  
            PreparedStatement ps = Conexao.conexao.prepareStatement(comando);  
            ps.setString(1, login);
            ps.setString(2, senha);
            ResultSet rsDados = ps.executeQuery();  

Assim você não se preocupa com SQL Injection, nem terá problemas com apóstrofos/aspas únicas.

[quote=drsmachado][quote=jakefrog]Coloca um espaço antes do AND.

Você poderia ter jogado para uma string e ver qual a consulta está sendo formada.

Você fazendo concatenação de string, igual oq vc está fazendo, vocÊ está vulnerável ao sql injection.[/quote]
Ou a problemas com nomes como Louis McAdams e Joana DArc…
O mais adequado é você fazer uso do que o preparedStatement fornece.

String comando = "SELECT * FROM login l WHERE l.loginVendedora = ? AND l.senha = ? ";  
        int comparaLoginVendedora = 0;  
  
        try {  
            PreparedStatement ps = Conexao.conexao.prepareStatement(comando);  
            ps.setString(1, login);
            ps.setString(2, senha);
            ResultSet rsDados = ps.executeQuery();  

Assim você não se preocupa com SQL Injection, nem terá problemas com apóstrofos/aspas únicas.[/quote]

drsmachado e jakefrog, muito obrigada pela ajuda!!!
Utilizei as dicas apontadas por ambos, construindo meu método com a estrutura abaixo e foi SUCESSO:

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

    Conexao.abrirConexao();
    String comando = "SELECT * FROM login l WHERE l.loginVendedora = ? AND l.senha = ? ";
    int comparaLoginVendedora = 0;
           
   try {
        PreparedStatement ps = Conexao.conexao.prepareStatement(comando);
        ps.setString(1, login);   
        ps.setString(2, senha);   
        ResultSet rsDados = ps.executeQuery(); 

        while (rsDados.next()) {
            
            comparaLoginVendedora = rsDados.getInt("idLogin");

        }

        Conexao.fecharConexao();

    } catch (Exception e) {
        e.printStackTrace();
    }
  
   return comparaLoginVendedora;
}[/code][b]MUITO OBRIGADA!!![/b]