Apostila FJ-21 Atualizando Contato

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” %>

Insert title here Formulário para alteração de contatos:
    <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.

Desculpe o incomodo galera, ja descobri meu erro, era um erro na linha de comando do sql, tinha uma vírgula a +.

String sql = "update contatos set nome=?, departamento=?, where id=?";

Camarada, acredito que seja a vírgula que está antes da cláusula “where” que está gerando o problema de síntaxe SQL.