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

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(); } }

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

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.

         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).

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

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.

No código, acima, existe o stmt=conn.prepareStatement(insere);

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