Bem gente, Estou no exercício 9.8 que é o ultimo exercício do capítulo mas estou com dificuldades de alterar os dados no banco, meu problema e o seguinte…
Eu fiz o exercício do seguinte modo:
O usuario entra na pagina “altera-contato.jsp” para alterar os dados de acordo com seu “ID”
Pagina Altera Contato
[code]<%@ page language=“java” contentType=“text/html; charset=ISO-8859-1”
pageEncoding=“ISO-8859-1”%>
<%@ taglib uri=“http://java.sun.com/jsp/jstl/core”
prefix=“c” %>
<%@ taglib tagdir="/WEB-INF/tags"
prefix=“caelum” %>
<form action="mvc" method="POST">
Id:
<input type="text" name="id"/><br/>
Nome:
<input type="text" name="nome"/><br/>
Departamento:
<input type="text" name="departamento"/><br/>
<input type="hidden" name="logica" value="AlteraContatoLogic"/>
<input type="submit" value="Enviar"/>
</form>
<c:import url=“rodape.jsp” />
[/code]Depois disso ele digita o ID e depois digita o nome e o departamento da maneira que o usuario quer que fique, logo apos ele clicar em enviar entra a classe AlteraContatoLogic:
[code]package br.com.wacontactcenter.mvc.logica;
import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import br.com.wacontactcenter.jdbc.dao.ContatoDAO;
import br.com.wacontactcenter.jdbc.modelo.Contato;
public class AlteraContatoLogic implements Logica {
public void executa(HttpServletRequest request,
HttpServletResponse response)
throws Exception {
Contato contato = new Contato();
contato.setId(Integer.parseInt(request.getParameter("id")));
contato.setNome(request.getParameter("nome"));
contato.setDepartamento(request
.getParameter("departamento"));
ContatoDAO dao = new ContatoDAO();
dao.atualiza(contato);
RequestDispatcher rd = request
.getRequestDispatcher("/lista-contatos-elegante.jsp");
rd.forward(request, response);
System.out.println("Alterando contato ..." +
contato.getNome());
}
}[/code]
ele pega os dados do parametro e envia para a classe Contato:
[code]package br.com.wacontactcenter.jdbc.modelo;
public class Contato {
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getDepartamento() {
return departamento;
}
public void setDepartamento(String departamento) {
this.departamento = departamento;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
private String nome;
private String departamento;
private int id;
}[/code]
Logo apos isso a Classe AlteraContatoLogic chama o metodo atualiza da classe ContatoDAO:
[code] public void atualiza(Contato contato) {
String sql = "update contatos set nome=?, departamento=?, where id=?";
try {
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setString(1, contato.getNome());
stmt.setString(2, contato.getDepartamento());
stmt.setLong(3, contato.getId());
stmt.execute();
stmt.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}[/code]
e assim ele realiza a alteração, mas quando eu faço isso, e clico em enviar na pagina de alteração, aparece o erro:
[code]HTTP Status 500 - A lógica de negócios causou uma exceção
type Exception report
message A lógica de negócios causou uma exceção
description The server encountered an internal error that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: A lógica de negócios causou uma exceção
br.com.wacontactcenter.mvc.servlet.ControllerServlet.service(ControllerServlet.java:25)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
root cause
java.lang.RuntimeException: java.sql.SQLSyntaxErrorException: ORA-01747: especificação inválida para usuário.tabela.coluna, tabela.coluna ou de coluna
br.com.wacontactcenter.jdbc.dao.ContatoDAO.atualiza(ContatoDAO.java:77)
br.com.wacontactcenter.mvc.logica.AlteraContatoLogic.executa(AlteraContatoLogic.java:24)
br.com.wacontactcenter.mvc.servlet.ControllerServlet.service(ControllerServlet.java:22)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
root cause[/code]
Como sou iniciante ainda não descobri o meu erro, desculpe ter colocado tanto codigo mas quiz detalhar o que eu fiz para facilitar a procura do erro, se alguem puder me ajudar eu fico grato.