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 D
Arc…
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 D
Arc…
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]