Erro no codigo da classe DAO ( RESOLVIDO )

Boa noite, fazendo os exercícios da apostila da Caelum, foi proposto que eu criasse o método altera, que deveria alterar os dados do meu contato no MySQL. Porém está acusando um erro que não consegui solucionar, vou postar os códigos e o erro se alguém puder me ajudar por favor eu agradeço muito !

Código altera da classe DAO:

	public void altera(Contato contato) {
	String sql = "update contatos set nome=?, email=?, endereco=?, dataNascimento=?, where id=?";
	try {
		PreparedStatement stmt = connection.prepareStatement(sql);
		stmt.setString(1, contato.getNome());
		stmt.setString(2, contato.getEmail());
		stmt.setString(3, contato.getEndereco());
		stmt.setDate(4, new Date(contato.getDataNascimento().getTimeInMillis()));
		stmt.setLong(5, contato.getId());
		stmt.execute();
		stmt.close();

	} catch (SQLException e) {
		throw new RuntimeException(e);
	}

}

Código main que está testando a alteração:

package br.com.caelum.jdbc.testes;

import java.util.Calendar;

import br.com.caelum.jdbc.dao.ContatoDao;
import br.com.caelum.jdbc.modelo.Contato;

public class TestaAlteraEREMOVE {
	public static void main(String[] args) {
		ContatoDao dao = new ContatoDao();
		Contato novocontato = new Contato();
		novocontato.setEmail("novoemail@novoemail.com");
		novocontato.setEndereco("novo endereço");
		novocontato.setId((long) 5);
		novocontato.setNome("novo contato");
		novocontato.setDataNascimento(Calendar.getInstance());
		
		dao.altera(novocontato);
	}
}

Erro:

Exception in thread "main" java.lang.RuntimeException: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'where id=5' at line 1
	at br.com.caelum.jdbc.dao.ContatoDao.altera(ContatoDao.java:107)
	at br.com.caelum.jdbc.testes.TestaAlteraEREMOVE.main(TestaAlteraEREMOVE.java:19)
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'where id=5' at line 1
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
	at com.mysql.jdbc.Util.getInstance(Util.java:408)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:943)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680)
	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2487)
	at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)
	at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1197)
	at br.com.caelum.jdbc.dao.ContatoDao.altera(ContatoDao.java:103)

O problema não é essa vírgula antes do where?

1 curtida

Era exatamente isso ! kkkk muito obrigado ! Bati cabeça uma hora com esse codigo !

1 curtida