Caelum FJ21 Exercício 2.11

4 respostas
F

Boa noite,

Estou tentando fazer o exercício 2.11 da apostila de Desenvolvimento Web com Java da Caelum e não consigo rodar esse programa sem uma excpetion, segue:

Conectando ao banco
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 MySQL server version for the right syntax to use near ‘(‘Caelum’,‘[email removido]’,‘R. Vergueiro 3185 cj57’,‘2016-01-27’)’ at line 1
** at br.com.caelum.jdbc.dao.ContatoDao.adiciona(ContatoDao.java:34)**
** at br.com.caelum.jdbc.teste.TestaInsere.main(TestaInsere.java:18)**
Caused by: 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 ‘(‘Caelum’,‘[email removido]’,‘R. Vergueiro 3185 cj57’,‘2016-01-27’)’ 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:404)**
** at com.mysql.jdbc.Util.getInstance(Util.java:387)**
** at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:939)**
** at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3878)**
** at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3814)**
** at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2478)**
** at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2625)**
** at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2551)**
** at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1861)**
** at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1192)**
** at br.com.caelum.jdbc.dao.ContatoDao.adiciona(ContatoDao.java:31)**
** … 1 more**

Fiz igualzinho a apostila e acabou dando esse erro, não sei se foi algum import errado pois lá não fala exatamente quais imports deveriam ter.

4 Respostas

dsystem

@f.java13 posta o resto do código para poder ver onde está o erro.

B

sua query está com erro de sintaxe não vi seu código, mas pelo erro você está usando aspas simples, tente usar aspas dupla ("")

F

Jurava q aqui no fórum tinha um comando que formatava o código fonte, não encontrei desculpe. Segue código abaixo.

package br.com.caelum.jdbc.modelo;

import java.util.Calendar;

public class Contato {

private Long id;

private String nome;

private String email;

private String endereco;

private Calendar dataNascimento;
public Long getId() {
	return id;
}
public void setId(Long id) {
	this.id = id;
}
public String getNome() {
	return nome;
}
public void setNome(String nome) {
	this.nome = nome;
}
public String getEmail() {
	return email;
}
public void setEmail(String email) {
	this.email = email;
}
public String getEndereco() {
	return endereco;
}
public void setEndereco(String endereco) {
	this.endereco = endereco;
}
public Calendar getDataNascimento() {
	return dataNascimento;
}
public void setDataNascimento(Calendar dataNascimento) {
	this.dataNascimento = dataNascimento;
}

}

package br.com.caelum.jdbc.dao;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.SQLException;

import java.sql.Date;

import br.com.caelum.jdbc.ConnectionFactory;
import br.com.caelum.jdbc.modelo.Contato;

public class ContatoDao {
private Connection connection;

public ContatoDao(){
	this.connection = new ConnectionFactory().getConnection();
}
public void adiciona(Contato contato) {

String sql = insert into contatos " +

”(nome,email,endereco,dataNascimento" +

values (?,?,?,?);

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.execute();
	stmt.close();
} catch (SQLException e) {
	throw new RuntimeException(e);
}

}
}

package br.com.caelum.jdbc.teste;

import java.util.Calendar;

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

public class TestaInsere {

public static void main(String[] args) {

Contato contato = new Contato();

contato.setNome(Caelum);

contato.setEmail(<a>"[email removido]</a>");

contato.setEndereco(R. Vergueiro 3185 cj57);

contato.setDataNascimento(Calendar.getInstance());
ContatoDao dao = new ContatoDao();
	
	dao.adiciona(contato);
	
	System.out.println("Gravando!");
}

}

E já tinha de um outro exercício essa classe:

package br.com.caelum.jdbc;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;
public class ConnectionFactory {

public Connection getConnection() {

System.out.println(Conectando ao banco);

try {

<a href="//Class.forName">//Class.forName</a>(“com.mysql.jdbc.Driver”);

DriverManager.registerDriver(new com.mysql.jdbc.Driver()); //Essa linha foi a diferença

return DriverManager.getConnection(jdbc:mysql://localhost/fj21”, “root”, “”);

} catch(SQLException e) {

e.printStackTrace();

throw new RuntimeException(e);
}
     
}

}

F

Achei o erro, é coisa besta está no código:

String sql = “insert into contatos " +
”(nome,email,endereco,dataNascimento" +
“values (?,?,?,?)”;

Faltou fechar o parenteses depois de dataNascimento.

Obrigado.

Criado 27 de janeiro de 2016
Ultima resposta 28 de jan. de 2016
Respostas 4
Participantes 3