Problemas com AlteraContatoDAO

19 respostas
M

Pessoal, boa tarde,
eu tenho um jsp onde eu digito a matricula de um cliente e retorna os dados do respectivo cliente em outra jsp para eu poder alterar, porem quando eu tento alterar da o seguinte erro:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near (MATRICULA=1107,NOMECOMPLETO=lkjhg,DT_NASCIMENTO=1982-12-29,IDENTIDADE=88, at line 1

sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)

sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)

java.lang.reflect.Constructor.newInstance(Constructor.java:532)

com.mysql.jdbc.Util.handleNewInstance(Util.java:406)

com.mysql.jdbc.Util.getInstance(Util.java:381)

com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1030)

com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)

com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3515)

com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3447)

sou novato, estou tentando na pratica, alguem poderia me ajudar? agradeço desde já.
segue as classes:

Altera_User.jsp:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Alterar Cadastro</title>
<script type="text/javascript">
function validar()
{
  if(confirm("Deseja realmente alterar os dados?"))
    {
            alert("Contato alterado com Sucesso");
			return true;
              }
               else
                 {
                         alert("Cancelado");
                                 return false;
                                   }}
                                   </script>

<style type="text/css">
<!--
body {
	background-color: #FF9;
}
-->
</style></head>

<body>
<form id="cadastro" name="cadastro" method="post" action="alteraContato" onsubmit="return validar();">
  <p>Matrícula: 
    <input name="contato.matricula" type="text" id="contato.matricula" value=${contato.matricula} /> 
  </p>
  <p>
    <label>Nome Completo
    <input name="contato.nomecompleto" type="text" id="contato.nomecompleto" value=${contato.nomecompleto} size="100" />
    </label>
  </p>
  <p>CPF:  
    <input type="text" name="contato.cpf" id="contato.cpf" value=${contato.cpf} /> 
    RG: 
    <input type="text" name="contato.identidade" id="contato.identidade" value=${contato.identidade} />
  Órgão Expedidor:
  <input name="contato.orgaoexpedidor" type="text" id="contato.orgaoexpedidor" value=${contato.orgaoexpedidor} size="10" /> 
Data Nascimento:
<input type="text" name="contato.dt_nascimento" id="contato.dt_nascimento" value=${contato.dt_nascimento} />
  Título Eleitoral: 
  <input type="text" name="contato.tituloeleitoral" id="contato.tituloeleitoral" value=${contato.tituloeleitoral} />
  </p>
  <p>Celular: 
    <input type="text" name="contato.celular" id="contato.celular" value=${contato.celular} />
  Telefone: 
  <input type="text" name="contato.telefone" id="contato.telefone" value=${contato.telefone} />
  </p>
  <p>Endereço: 
    <input name="contato.endereco.rua" type="text" id="contato.endereco.rua" size="50" value=${contato.endereco.rua} /> 
    Número: 
    <input name="contato.endereco.numero" type="text" id="contato.endereco.numero" size="10" value=${contato.endereco.numero} /> 
    Bairro:
    <input name="contato.endereco.bairro" type="text" id="contato.endereco.bairro" size="30" value=${contato.endereco.bairro} /> 
    Cidade:
    <input name="contato.endereco.cidade" type="text" id="contato.endereco.cidade" size="30" value=${contato.endereco.cidade} />
    Cep:
    <input name="contato.endereco.cep" type="text" id="contato.endereco.cep" value=${contato.endereco.cep} /> 
    Estado: 
    <input name="contato.endereco.estado" type="text" id="contato.endereco.estado" size="20" value=${contato.endereco.estado} />
  </p>
  <p>Complemento: 
    <input name="contato.endereco.complemento" type="text" id="contato.endereco.complemento" value=${contato.endereco.complemento} size="50" />
  </p>
  <p>Email: 
    <input name="contato.email" type="text" id="contato.email" size="40" value=${contato.email} />
  </p>
  <p>
    <center><label>
      <input type="submit" name="button" id="button" value="Alterar" />
    </label>
    <input type="reset" name="button2" id="button2" value="Resetar" /></center>
  </p>
</form>
</body>
</html>

ContatoDAO:

public boolean AlteraContato(Contato contato) throws Exception {	
		
		PreparedStatement stmt;
		stmt = connection.prepareStatement("UPDATE TB_TB_CONTATO SET(MATRICULA=?,NOMECOMPLETO=?,DT_NASCIMENTO=?,IDENTIDADE=?,ORGAOEXPEDIDOR=?,CPF=?,TITULOELEITORAL=?,CELULAR=?,TELEFONE=?,EMAIL=?) WHERE MATRICULA = ?");
		
		stmt.setInt(1, contato.getMatricula());
		stmt.setString(2, contato.getNomecompleto());
		stmt.setString(3, contato.getDt_nascimento());
		stmt.setString(4, contato.getIdentidade());
		stmt.setString(5, contato.getOrgaoexpedidor());
		stmt.setString(6, contato.getCpf());
		stmt.setString(7, contato.getTituloeleitoral());
		stmt.setString(8, contato.getCelular());
		stmt.setString(9, contato.getTelefone());
		stmt.setString(10, contato.getEmail());
		stmt.setInt(11, contato.getMatricula());
	    stmt.executeUpdate();
	    stmt.close();
	    stmt.clearParameters();
	    
	    stmt = connection.prepareStatement("SELECT ID_CLIENTE FROM TB_TB_CONTATO WHERE MATRICULA = ?");
	    stmt.setInt(1, contato.getMatricula());
	    
	    ResultSet rs = stmt.executeQuery();
	    if(rs.next()){
	      contato.setId_contato(rs.getInt("ID_CLIENTE"));
	      }else{return false;}
	    
	      stmt.clearParameters();
	      
	      stmt = connection.prepareStatement("UPDATE TB_TB_ENDERECO SET(null,NUMERO=?,RUA=?,BAIRRO=?,CEP=?,CIDADE=?,ESTADO=?,COMPLEMENTO=?) WHERE ID_CLIENTE = ?");

		    stmt.setInt(1, contato.getId_contato());
		    stmt.setString(2, contato.getEndereco().getNumero());
			stmt.setString(3, contato.getEndereco().getRua());
			stmt.setString(4, contato.getEndereco().getBairro());
			stmt.setString(5, contato.getEndereco().getCep());
			stmt.setString(6, contato.getEndereco().getCidade());
			stmt.setString(7, contato.getEndereco().getEstado());
			stmt.setString(8, contato.getEndereco().getComplemento());
			stmt.setInt(9, contato.getId_contato());
		    stmt.executeUpdate();
		    stmt.close();

		    stmt.clearParameters();
	    
			return false;
	      
	      
	}

AlteraContatoAction:

package br.com.mensalidade.action;

import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;

import br.com.mensalidade.Classes.Contato;
import br.com.mensalidade.DAO.ContatoDAO;

public class AlteraContatosAction {
	
		private Contato contato;
		@Action(value="alteraContato", results= {
				@Result(name="ok", type="redirectAction", params= {"actionName", "selecionaContato"})
		})
		public String execute() throws Exception {
			new ContatoDAO().AlteraContato(contato);
			return "ok";
		}
		public Contato getContato() {
			return this.contato;
		}
		public void setContato(Contato contato) {
			this.contato = contato;
		}
}

Agradeço a todos

19 Respostas

G

data de nascimento num é date nao?

M

Não na classe Contato esta como String.

SDS

Mikhas

Esta faltando um parenteses no fim do SET(MATRICULA=?, … ) , depois de EMAIL

G

hmmm e a matricula é PK acho que você nao pode modificar ela.

M

não esta nao, o parenteses fecha no final.

,EMAIL=?) WHERE MATRICULA = ?");

M

guialeixo a matricula nao é pk nao o pk é id_cliente.

obrigado

G

ja tentou fazer esse update no proprio Mysql?

tinorberto

sua sql esta errada, execute ela para ver.

marcelo.bellissimo

Aquele parêntese após o SET é desnecessário… ou tira ele, ou fecha ele corretamente antes do WHERE…
E todos os campos estão preenchidos? Não tem nada vindo null dos dados do contato, né?

V

Tira esse (), e coloque assim;

String sql = "UPDATE tabela SET campo1 = ? , campo2 = ? WHERE campo = ?";

O null na linha 31 também é desnecessario.

M

Obrigado a todos, eu tirei o () e funcionou, porem so esta atualizando na tabela TB_TB_CONTATO na tabela endereco nao acontece nada, alguma ajuda?

G

da um debug e olha q q ta passando no contato endereço

M

Guialeixo, obrigado denovo, mas nao sei como fazer o debug, uso o eclipse.

abraços

G

marca os break points e tem um botao no eclipse chamado debug dai roda o programa e olha. vai apertando f6

M

po cara, foi mal aí, mas como eu marco os break points??

G

http://hotwork.sourceforge.net/hotwork/manual/eclipse/eclipse-user-guide.html

do lado esquerdo das linhas

M

nao consegui debugar, nao tem como debugar como java aplication so como server, tem alguma outra forma de achar o erro? pq so grava em uma tabela e nao nas 2?

G

cara aprenda a debugar,digo isso por mim, mas sem debug o programador fica perdido, ou entao c pode da um system.out.println , mas ainda acho que o debug eh melhor.

M

tentei o debug, como nao tenho experiencia nao vi nada, alguem poderia me dar um help mais simples?
SDS

Criado 25 de agosto de 2010
Ultima resposta 25 de ago. de 2010
Respostas 19
Participantes 6