Query que é simples e que está se transformando em um pesadelo (Select e JSF)

6 respostas
M

Duvida em select com JSF, estou fazendo uma validação de usuário e gostaria de saber o seguinte, o Select de inteiro eu consigo retornar, agora select de String como deve ser feito ( não aceita, por exemplo: =“SELECT * FROM Cliente WHERE Cli_Login=”?""; ou SELECT * FROM Cliente WHERE Cli_Login="+Cli_login+""; ou ainda SELECT * FROM Cliente WHERE Cli_Login=’"+ login +"’"; )

String r ="SELECT * FROM Cliente WHERE ID=?"; try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); conn=DriverManager.getConnection(url); stmt.setString(8,login); rs= stmt.executeQuery(r); if (rs.next()){ setMsg("Já existe um registro com este login"); return getMsg(); } else{ // Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // conn=DriverManager.getConnection(url); stmt=conn.prepareStatement(insere); stmt.setString(1,nome); stmt.setString(2,cpfcnpj); stmt.setString(3,endereco); stmt.setString(4,bairro); stmt.setString(5,cidade); stmt.setString(6,estado); stmt.setString(7,cep); stmt.setString(8,login); stmt.setString(9,senha); stmt.executeUpdate(); setMsg("Dados incluídos com sucesso !"); return getMsg();} } catch(Exception ex){ setMsg("Ocorreu o seguinte erro: " + ex.getMessage() + ex.getStackTrace()); return getMsg(); } }

6 Respostas

lcegatti

Você não precisa colocar aspas (") no seu parâmetro onde vc vai passar sua String, por exemplo assim deveria funcionar:

Stirng sql = "SELECT * FROM Cliente WHERE Cli_Login=?";
PrepareStatement pstmt = conexao.prepareStatement(sql);
pstmt.setString(1,"NomeCliente"); //Aqui você passa a sua String que vc deseja consultar.

Ve se funciona…

[]'s

M

Bom, mudei, mas continuo pegando erro:

public String cadastra(){
        String r ="SELECT * FROM Cliente WHERE Cli_Login=?";
        try{
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            conn=DriverManager.getConnection(url);
            stmt.setString(8,"Cli_Login");
            rs= stmt.executeQuery(r);
            if (rs.next()){
                setMsg("Já existe um registro com este login");
                return getMsg();
            } else{
          //  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
          //  conn=DriverManager.getConnection(url);
            stmt=conn.prepareStatement(insere);
            stmt.setString(1,nome);
            stmt.setString(2,cpfcnpj);
            stmt.setString(3,endereco);
            stmt.setString(4,bairro);
            stmt.setString(5,cidade);
            stmt.setString(6,estado);
            stmt.setString(7,cep);
            stmt.setString(8,login);
            stmt.setString(9,senha);
            stmt.executeUpdate();
            setMsg("Dados incluídos com sucesso !");
            return getMsg();}
        }
            catch(Exception ex){
                setMsg("Ocorreu o seguinte erro: " + ex.getMessage() + ex.getStackTrace());
                return getMsg();          
        }
}

Só que continuo com problema:
SE eu for direto no ACCEss:

SELECT * FROM Cliente WHERE Cli_Login=123

Pego a mensagem de erro Tipo de dados incompativeis na expressão de critério.

Se colocar no select no access:

SELECT * FROM Cliente WHERE Cli_Login="123", funfa!! - com aspas.

Acho que tenho que mudar o select no java para retornar correto.

T
String r ="SELECT * FROM Cliente WHERE Cli_Login=?";  
...

             stmt.setString(1,nome);  
             stmt.setString(2,cpfcnpj);  
             stmt.setString(3,endereco);  
             stmt.setString(4,bairro);  
             stmt.setString(5,cidade);  
             stmt.setString(6,estado);  
             stmt.setString(7,cep);  
             stmt.setString(8,login);  
             stmt.setString(9,senha);

Se só há 1 parâmetro, você tem de chamar só 1 “stmt.setString”, que é o primeiro. Se passar os outros pode dar problema (principalmente com Access).

M

Mas só estou usando uma para validar o login… o restante faz parte do update…

T

Mas onde é que está o raio do Update? Uma coisa que costumo fazer quando estou com muitos erros é jogar fora o que fiz e refazer as coisas, mas pensando em cada coisa que estou fazendo. No seu caso, não tem Update nenhum no código que você postou. Só vi um Select.

M
private String insere="INSERT INTO Cliente (Cli_Nome,Cli_CPF_CNPJ,Cli_Endereco,Cli_Bairro,Cli_Cidade,Cli_Estado,Cli_CEP,Cli_Login,Cli_Senha) VALUES (?,?,?,?,?,?,?,?,?)";
No código, acima, existe o
stmt=conn.prepareStatement(insere);

e depois há o [/code]stmt.executeUpdate();[code]

Criado 22 de outubro de 2008
Ultima resposta 22 de out. de 2008
Respostas 6
Participantes 3