Método que pesquisa no banco enviando parâmetros [Resolvido]

7 respostas
braian.adans

ee aii pessoal…
Sou novo no forum… e estou começando a desenvolver em java e estou precisando de uma ajuda aqui…

ée o seguinte… preciso de um método que envie login e senha para o banco e me retorne uma linha da tabela funcionario…
ée simples… mas está me dando um pouco de dor de cabeça… até porque sou leigo no assunto…

esse é o código que fiz…


public funcionario Autentica(String login,String senha) throws SQLException, ClassNotFoundException {

Connection con = null;

PreparedStatement com = null;
con = ConnectionFactory.getConnectionMySql();
    String vSQL = "Select * fron funcionario where login=? and senha=?";
    ResultSet rs = com.executeQuery(vSQL);
    com.setString(1,login);
    com.setString(2,senha);
    
    

    funcionario f=new funcionario();
    
    f.setCpf(rs.getString("cpf"));
    f.setNome(rs.getString("nome"));
    f.setEndereco(rs.getString("endereco"));
    f.setTelefone(rs.getString("telefone"));
    f.setCelular(rs.getString("celular"));
    f.setData_adm(rs.getString("data_adm"));
    f.setSenha(rs.getString("senha"));
    f.setLogin(rs.getString("login"));
    f.setAdm(rs.getBoolean("adm"));
    
    
    return f;

}

bom é isso aii… se alguém puder ajudar…vlw

7 Respostas

francislon

Quando você trabalha com objetos ResultSet você precisa iterá-los para ter acesso ao resultado de uma consulta. Por exemplo:

ResultSet rs = con.executeQuery("select * from algo");

//aqui vc itera pelo resultset

while(rs.next()){
    String coluna1 = rs.getString("coluna1");
    String coluna2 = rs.getString("coluna2");
}

//feche as conexoes
Olhando seu código eu vi dois erros. Na linha onde você cria o objeto ResultSet
ResultSet rs = com.executeQuery(vSQL);
Eu acho que deveria ser:
ResultSet rs = con.executeQuery(vSQL); //o objeto da conexao que vc criou é con e não com

O segundo erro é porquê você não iterou pelo ResultSet para recuperar o resultado. Mais ou menos assim:

funcionario f = null;
if(rs.next()){
    f=new funcionario(); 

    f.setCpf(rs.getString("cpf")); 
    f.setNome(rs.getString("nome")); 
    f.setEndereco(rs.getString("endereco")); 
    f.setTelefone(rs.getString("telefone")); 
    f.setCelular(rs.getString("celular")); 
    f.setData_adm(rs.getString("data_adm")); 
    f.setSenha(rs.getString("senha")); 
    f.setLogin(rs.getString("login")); 
    f.setAdm(rs.getBoolean("adm")); 
}
return f;
braian.adans

[color=darkblue]

francislon:
Quando você trabalha com objetos ResultSet você precisa iterá-los para ter acesso ao resultado de uma consulta. Por exemplo:

ResultSet rs = con.executeQuery("select * from algo");

//aqui vc itera pelo resultset

while(rs.next()){
    String coluna1 = rs.getString("coluna1");
    String coluna2 = rs.getString("coluna2");
}

//feche as conexoes
Olhando seu código eu vi dois erros. Na linha onde você cria o objeto ResultSet
ResultSet rs = com.executeQuery(vSQL);
Eu acho que deveria ser:
ResultSet rs = con.executeQuery(vSQL); //o objeto da conexao que vc criou é con e não com

O segundo erro é porquê você não iterou pelo ResultSet para recuperar o resultado. Mais ou menos assim:

funcionario f = null;
if(rs.next()){
    f=new funcionario(); 

    f.setCpf(rs.getString("cpf")); 
    f.setNome(rs.getString("nome")); 
    f.setEndereco(rs.getString("endereco")); 
    f.setTelefone(rs.getString("telefone")); 
    f.setCelular(rs.getString("celular")); 
    f.setData_adm(rs.getString("data_adm")); 
    f.setSenha(rs.getString("senha")); 
    f.setLogin(rs.getString("login")); 
    f.setAdm(rs.getBoolean("adm")); 
}
return f;
[/color][color=#444444] [/color]

poderia me dar uma idéia de como ficaria o código completo?
não consegui identificar onde eu passaria o parâmetro para a query..
vlw...

ssh
//
wbdsjunior

braian.adans:
poderia me dar uma idéia de como ficaria o código completo?
não consegui identificar onde eu passaria o parâmetro para a query…
vlw…

alé do que o amigo francislon disse, você inverteu a ordem da passagem de pâmetros e da execução do statment.

public funcionario Autentica(String login,String senha) throws SQLException, ClassNotFoundException { Connection con = ConnectionFactory.getConnectionMySql();; String vSQL = "select * fron funcionario where login = ? and senha = ?"; PreparedStatement com = con.prepareStatement(vSQL); com.setString(1, login); com.setString(2, senha); ResultSet rs = com.executeQuery(); // ... }
a documentação é sua amiga… PreparedStatement.

braian.adans

wbdsjunior:
braian.adans:
poderia me dar uma idéia de como ficaria o código completo?
não consegui identificar onde eu passaria o parâmetro para a query…
vlw…

alé do que o amigo francislon disse, você inverteu a ordem da passagem de pâmetros e da execução do statment.

public funcionario Autentica(String login,String senha) throws SQLException, ClassNotFoundException { Connection con = ConnectionFactory.getConnectionMySql();; String vSQL = "select * fron funcionario where login = ? and senha = ?"; PreparedStatement com = con.prepareStatement(vSQL); com.setString(1, login); com.setString(2, senha); ResultSet rs = com.executeQuery(); // ... }

a documentação é sua amiga… PreparedStatement.

Ouw… ou eu sou muito burro…hushsuhsu
Ou o NetBeans tá conspirando contra mim…kkk

o código ficaria assim?
Não está funcionando…

public funcionario Autentica(String login,String senha) throws SQLException, ClassNotFoundException {

Connection con = ConnectionFactory.getConnectionMySql();

String vSQL = select * from funcionario where login =? and senha =?;

PreparedStatement com = (PreparedStatement) con.prepareStatement(vSQL);

com.setString(1, login);

com.setString(2, senha);

ResultSet rs = com.executeQuery();
funcionario f=new funcionario();
    
    f.setCpf(rs.getString("cpf"));
    f.setNome(rs.getString("nome"));
    f.setEndereco(rs.getString("endereco"));
    f.setTelefone(rs.getString("telefone"));
    f.setCelular(rs.getString("celular"));
    f.setData_adm(rs.getString("data_adm"));
    f.setSenha(rs.getString("senha"));
    f.setLogin(rs.getString("login"));
    f.setAdm(rs.getBoolean("adm"));
    
    
    return f;

}

wbdsjunior

faltou um rs.next():

public funcionario Autentica(String login,String senha) throws SQLException, ClassNotFoundException {   
    Connection con = ConnectionFactory.getConnectionMySql();  
    String vSQL = "select * from funcionario where login =? and senha =?";   
    PreparedStatement com = (PreparedStatement) con.prepareStatement(vSQL);   
    com.setString(1, login);  
    com.setString(2, senha);  
    ResultSet rs = com.executeQuery();   
    funcionario f = null;

    if (rs.next()) {
        f = new funcionario();
        
        f.setCpf(rs.getString("cpf"));
        f.setNome(rs.getString("nome"));
        f.setEndereco(rs.getString("endereco"));
        f.setTelefone(rs.getString("telefone"));
        f.setCelular(rs.getString("celular"));
        f.setData_adm(rs.getString("data_adm"));
        f.setSenha(rs.getString("senha"));
        f.setLogin(rs.getString("login"));
        f.setAdm(rs.getBoolean("adm"));
    }
    return f;
}
outra dica é: sempre que postar o código, coloque-o entre tag code.
braian.adans

Pessoal muito obrigado pela ajuda…

Deu certinho…
Vlw Mesmo…

Criado 10 de dezembro de 2011
Ultima resposta 13 de dez. de 2011
Respostas 7
Participantes 4