Galera mais uma vez venho pedir ajuda a vcs criei um meto de ediçãocliente e infeliz não roda de jeito nenhum sempre q altero alguma
coisa ele dá um erro diferente agradeço se vcs me ajudarem.
acho que o problema esteja nesse executequery.
[code]public Clientes editarCliente(String cpf) throws SQLException{
con=conect.conectar();
String sql="update cliente set nome=?, email=?, estado=?, cidade=?, bairro=?, rua=?, cep=?, numero=? where cpf=?";
smt=con.prepareStatement(sql);
Clientes c = new Clientes();
smt.setString(1,cpf);
rs=smt.executeQuery();
while (rs.next()){
c.setNome(rs.getString("nome"));
c.setCpf(rs.getString("cpf"));
c.setEmail(rs.getString("email"));
c.setEstado(rs.getString("estado"));
c.setCidade(rs.getString("cidade"));
c.setBairro(rs.getString("bairro"));
c.setRua(rs.getString("rua"));
c.setCep(rs.getString("cep"));
c.setNumero(rs.getInt("numero"));
}
smt.execute();
smt.close();
con.close();
return c;
}[/code]
o problema é:
você tem 9 parâmetros (pontos de interrogação) no seu PreparedStatment
String sql="update cliente set nome=?, email=?, estado=?, cidade=?, bairro=?, rua=?, cep=?, numero=? where cpf=?";
mas atribui apenas 1
smt.setString(1,cpf);
rs=smt.executeQuery();
cadê os outros 8?
magraum
Novembro 12, 2010, 8:52am
#3
alem disso voce instanciou o objeto mas ficou por isso…
Clientes c = new Clientes();
smt.setString(1,[color=red]c.get[/color]Cpf);
Outro problema é que você está enviando uma ação de edição para o banco de dados e a tratando como uma consulta.
o método next só deve ser enviado para objetos ResultSet quando executamos uma consulta no BD, não quando estamos inserindo, editando ou excluindo registros.
[quote=magraum]alem disso voce instanciou o objeto mas ficou por isso…
Clientes c = new Clientes();
smt.setString(1,[color=red]c.get[/color]Cpf); [/quote]
você está enganado.
o cpf foi recebido por parâmetro no método editarCliente(String cpf) .
Pessoal eu alterei o método mas assim vêm dando pau não consigo entender em que por favor agradeço a colaboração de vcs…
[code]public Clientes editarCliente(String cpf) throws SQLException{
con=conect.conectar();
String sql="update cliente set nome=?, cpf=?, email=?, estado=?, cidade=?, bairro=?, rua=?, cep=?, numero=? where cpf=?";
smt=con.prepareStatement(sql);
Clientes c = new Clientes();
smt.setString(10, cpf);
rs=smt.executeQuery();
while (rs.next()){
c.setNome(rs.getString("nome"));
c.setCpf(rs.getString("cpf"));
c.setEmail(rs.getString("email"));
c.setEstado(rs.getString("estado"));
c.setCidade(rs.getString("cidade"));
c.setBairro(rs.getString("bairro"));
c.setRua(rs.getString("rua"));
c.setCep(rs.getString("cep"));
c.setNumero(rs.getInt("numero"));
}
smt.setString(1,c.getNome());
smt.setString(2,c.getCpf());
smt.setString(3,c.getEmail());
smt.setString(4,c.getEstado());
smt.setString(5,c.getCidade());
smt.setString(6,c.getBairro());
smt.setString(7,c.getRua());
smt.setString(8,c.getCep());
smt.setInt(9,c.getNumero());
smt.execute();
smt.close();
con.close();
return c;
}[/code]
Um dos problemas está aqui:
[code]
String sql=“update cliente set nome=?, cpf=?, email=?, estado=?, cidade=?, bairro=?, rua=?, cep=?, numero=? where cpf=?”;
smt=con.prepareStatement(sql);
Clientes c = new Clientes();
smt.setString(10, cpf);
rs=smt.executeQuery();
while (rs.next()){
[/code]
Se você está tratando uma edição como uma consulta.
Não precisa deste ResultSet.
Retirei o resultset e agora ele me dá outros problemas referêntes segue os erros
apresentados no meu console na imagem abaixo.
esses são os erros que aparecem no console quando compilo o código…Após ter retirado o resultset
Exception in thread “main” org.postgresql.util.PSQLException: Nenhum valor especificado para o parâmetro 10
at org.postgresql.core.QueryExecutor.sendQueryV3(QueryExecutor.java:313)
at org.postgresql.core.QueryExecutor.executeV3(QueryExecutor.java:121)
at org.postgresql.core.QueryExecutor.execute(QueryExecutor.java:100)
at org.postgresql.core.QueryExecutor.execute(QueryExecutor.java:43)
at org.postgresql.jdbc1.AbstractJdbc1Statement.execute(AbstractJdbc1Statement.java:517)
at persistencia.Repositorio_Cliente.editarCliente(Repositorio_Cliente.java:111)
at teste.Testes.main(Testes.java:31)
método para atualização do Cliente:
public void editarCliente(Cliente c) throws SQLException {
con = conect.conectar();
String sql = "update cliente set nome = ?, cpf = ?, email = ?, estado = ?, cidade = ?, bairro = ?, rua = ?, cep = ?, numero = ? where cpf = ?";
smt = con.prepareStatement(sql);
smt.setString(1, c.getNome());
smt.setInt(2, c.getCpf());
smt.setString(3, c.getEmail());
smt.setString(4, c.getEstado());
smt.setString(5, c.getCidade());
smt.setString(6, c.getBairro());
smt.setString(7, c.getRua());
smt.setString(8, c.getCep());
smt.setInt(9, c.getCpf());
smt.execute();
smt.close();
con.close();
}
Uso do método:
[code]
Cliente c = new Cliente();
c.setNome(“Fulano”);
…
ClasseQueAtualizaCliente cqac = new ClasseQueAtualizaCliente();
try {
cqac.editarCliente©;
} catch (SQLException e){
e.printStackTrace();
}[/code]
não há retorno porque você já tem o Cliente atualizado antes de passar para o método que faz isso no banco de dados.
importe: não testei o código acima. então pode haver ero de sintaxe.
Desculpa atazanar, vinkello, por causa do lance do HQL e SQL?
Meu veih tá pau aqui alterei todinho e continua dando pau agora diz que to passando um valor nulo pra
o parametro nome.
[code]public void editarCliente(String cpf) throws SQLException{
con=conect.conectar();
String sql="update cliente set nome=?, cpf=?, email=?, estado=?, cidade=?, bairro=?, rua=?, cep=?, numero=? where cpf=?";
smt=con.prepareStatement(sql);
Clientes c = new Clientes();
smt.setString(10, cpf);
smt.setString(1,c.getNome());
smt.setString(2,c.getCpf());
smt.setString(3,c.getEmail());
smt.setString(4,c.getEstado());
smt.setString(5,c.getCidade());
smt.setString(6,c.getBairro());
smt.setString(7,c.getRua());
smt.setString(8,c.getCep());
smt.setInt(9,c.getNumero());
smt.execute();
smt.close();
con.close();
}[/code]
Eu quiz dizer qual possui desempenho, segurança, etc… Melhores, rs
[]'s
magraum
Novembro 12, 2010, 4:38pm
#15
[quote=wbdsjunior][quote=magraum]alem disso voce instanciou o objeto mas ficou por isso…
Clientes c = new Clientes();
smt.setString(1,[color=red]c.get[/color]Cpf); [/quote]
você está enganado.
o cpf foi recebido por parâmetro no método editarCliente(String cpf) .[/quote]
malz, agora fui ver :oops:
[quote=getAdicted]kicolobo, por gentileza,
JDBC ou Hibernate?[/quote]
JDBC
magraum
Novembro 12, 2010, 4:53pm
#17
[quote=vinkello]Meu veih tá pau aqui alterei todinho e continua dando pau agora diz que to passando um valor nulo pra
[/quote]
cola teu codigo onde voce ta setando os atributos ao objeto, o problema pode ser no teu objeto.setNome em outra classe
[quote]getAdicted wrote:
kicolobo, por gentileza,
JDBC ou Hibernate?
JDBC[/quote]
Desculpa encher o saco, cara!
Por que? Sempre gostei do hibernate, mas dependendo da situação vou voltar a utilizar o JDBC.
Obrigado pela atenção!
[]'s
neno
Novembro 12, 2010, 4:56pm
#19
Muda o parametro do seu metodo manolo, ta dando nulo porque vc esta instanciando a classe cliente sem nada…
[code]public void editarCliente(Cliente c) throws SQLException{ //muda pra ficar assim
con=conect.conectar();
String sql="update cliente set nome=?, cpf=?, email=?, estado=?, cidade=?, bairro=?, rua=?, cep=?, numero=? where cpf=?";
smt=con.prepareStatement(sql);
// Clientes c = new Clientes(); //tira essa linha
smt.setString(10, cpf);
smt.setString(1,c.getNome());
smt.setString(2,c.getCpf());
smt.setString(3,c.getEmail());
smt.setString(4,c.getEstado());
smt.setString(5,c.getCidade());
smt.setString(6,c.getBairro());
smt.setString(7,c.getRua());
smt.setString(8,c.getCep());
smt.setInt(9,c.getNumero());
smt.execute();
smt.close();
con.close();
} [/code]
so não esquece de quando for chamar o medodo editar, passar o objeto c de Cliente com os atributos nome, cpf etc preenchidos!
Pow vlw neno consegui resolver o problema de boa msm abração… Até mais dúvidas galera…flw…