Pessoal,
to tentando inserir um objeto dentro das tabelas na sequencia:
Inserir endereço na tabela ENDEREÇO -> Buscar a chave estrangeira que está contida em cliente e inserir em cliente e assim por diante.
O problema é que quando ele vai p/ a tabela do endereço, mas quando chega no processo de ir ao cliente. acontece erro da sintaxe do sql.
Se puderem dar um help eu agradeço de coração! Valeu!
package fornecedor;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.PreparedStatement;
import java.sql.Statement;
import java.util.Vector;
import util.Endereco;
import conexao.GerenciadorConexoes;
public class RepositorioFornecedorDB implements IRepositorioFornecedor {
private static GerenciadorConexoes controladorConection = null;
public synchronized static GerenciadorConexoes getInstanciaControladorConection() {
if (controladorConection == null) {
controladorConection = new GerenciadorConexoes();
}
return controladorConection;
}
public RepositorioFornecedorDB() {
}
@Override
public void inserirFornecedor(Fornecedor fornecedor)throws FornecedorCadastradoException {
controladorConection = getInstanciaControladorConection();
try {
if (existeFornecedor(fornecedor.getIdentificador())) {
throw new FornecedorCadastradoException(fornecedor.getIdentificador());
} else {
//inserindo na tabela de de endereço
String sqlEndereco = "INSERT INTO tb_endereco " +
"(cep ," +
"rua ," +
"numero ," +
"complemento ," +
"bairro ," +
"cidade ," +
"estado )" +
"values (?,?,?,?,?,?,?)" ;
PreparedStatement preStmEndereco = controladorConection.conectar().prepareStatement(sqlEndereco);
preStmEndereco.setString(1, fornecedor.getEndereco().getCep());
preStmEndereco.setString(2, fornecedor.getEndereco().getRua());
preStmEndereco.setString(3, fornecedor.getEndereco().getNumero());
preStmEndereco.setString(4, fornecedor.getEndereco().getComplemento());
preStmEndereco.setString(5, fornecedor.getEndereco().getBairro());
preStmEndereco.setString(6, fornecedor.getEndereco().getCidade());
preStmEndereco.setString(7, fornecedor.getEndereco().getEstado());
preStmEndereco.executeUpdate();
//____________________________________________________________________________________
//pegando do codigo da tabela de endereço
String sqlCodigoEndereco = "SELECT id FROM tb_endereco " +
"WHERE cep = "+fornecedor.getEndereco().getCep() +"" +
"and numero = "+fornecedor.getEndereco().getNumero() +"" ;
Statement stmCodigoEndereco = controladorConection.conectar().createStatement();
ResultSet resultSetCodigoEndereco = stmCodigoEndereco.executeQuery(sqlCodigoEndereco);
//____________________________________________________________________________________
//inserindo na tabela pessoa
String sqlPessoa = "INSERT INTO tb_pessoa " +
"(email ," +
"nome ," +
"fone ," +
"data_nascimento ," +
"data_cadastro ," +
"tb_endereco_id ," +
"tipo " +
"values (?,?,?,?,?,?,?)" ;
PreparedStatement preStmPessoa = controladorConection.conectar().prepareStatement(sqlPessoa);
preStmPessoa.setString(1, fornecedor.getEmail());
preStmPessoa.setString(2, fornecedor.getNome());
preStmPessoa.setString(3, fornecedor.getFone());
preStmPessoa.setDate(4, fornecedor.getDataNascimento());
preStmPessoa.setDate(5, fornecedor.getDataCadastro());
preStmPessoa.setInt(6, resultSetCodigoEndereco.getInt("id"));
preStmPessoa.setString(7, "FORNECEDOR");
preStmPessoa.executeUpdate();
//____________________________________________________________________________________
//pegando o codigo da tabela pessoa
String sqlCodigoPessoa = "SELECT id FROM tb_pessoa "+
"WHERE email = "+fornecedor.getEmail()+"";
Statement stmCodigoPessoa = controladorConection.conectar().createStatement();
ResultSet resultSetCodigoPessoa = stmCodigoPessoa.executeQuery(sqlCodigoPessoa);
//____________________________________________________________________________________
//inserindo na tabela de fornecedor
String sqlFornecedor = "INSERT INTO tb_fornecedor " +
"(cnpj " +
"tb_pessoa_id )" +
"values(?,?) " ;
PreparedStatement preStmFornecedor = controladorConection.conectar().prepareStatement(sqlFornecedor);
preStmFornecedor.setString(1, fornecedor.getIdentificador());
preStmFornecedor.setInt(2, resultSetCodigoPessoa.getInt("id"));
preStmFornecedor.executeUpdate();
//....................................................................................
preStmEndereco.close();
preStmPessoa.close();
preStmFornecedor.close();
stmCodigoEndereco.close();
stmCodigoPessoa.close();
resultSetCodigoEndereco.close();
resultSetCodigoPessoa.close();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
controladorConection.desconectar(controladorConection.conectar());
}
}
Essa é apenas a parte do método InserirFornecedor, qual estou utilizando para clientes também..ou seja, o erro é igual
Segue o 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 'numero = bla' 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:409)
at com.mysql.jdbc.Util.getInstance(Util.java:384)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1054)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3566)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3498)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2113)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2562)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2512)
at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1476)
at fornecedor.RepositorioFornecedorDB.inserir(RepositorioFornecedorDB.java:71)
at fornecedor.CadastroFornecedor.cadastrar(CadastroFornecedor.java:17)
at fachada.Concessionaria.cadastrarFornecedor(Concessionaria.java:51)
at aplication.Aplication.main(Aplication.java:38)