Problemas com AlteraContatoDAO

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

data de nascimento num é date nao?

Não na classe Contato esta como String.

SDS

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

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

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

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

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

obrigado

ja tentou fazer esse update no proprio Mysql?

sua sql esta errada, execute ela para ver.

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é?

Tira esse (), e coloque assim;

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

O null na linha 31 também é desnecessario.

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?

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

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

abraços

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

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

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

do lado esquerdo das linhas

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?

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.

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