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