Apostila FJ-21 Atualizando Contato

2 respostas
L

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

<%@ 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" %>    
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<c:import url="cabecalho.jsp" />
        Formulário para alteração de contatos:<br/>
        
        <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" />
</body>
</html>

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:

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




}

ele pega os dados do parametro e envia para a classe Contato:

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

Logo apos isso a Classe AlteraContatoLogic chama o metodo atualiza da classe ContatoDAO:

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

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:

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

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.

2 Respostas

L

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

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

Criado 16 de janeiro de 2013
Ultima resposta 16 de jan. de 2013
Respostas 2
Participantes 2