Olá pessoal, estou com uma dúvida.
Fiz um MER e entre outras tabelas existem as tabelas TabCliente, TabEmpreendimento e devido ao relacionamento N:N criei a tabela TabCliente_Empreendimento que receberá codCliente e CodEmpreendimento.
Até aí sem novidades, a dúvida que tenho é na hora de inserir na tabela TabCliente_Empreendimento.
Tenho uma tela em que insiro os dados do cliente na tabela TabCliente e após realizar esse insert fecho a conexão normalmente e faço outro insert dos codCliente e CodEmpreendimento na tabela TabCliente_Empreendimento abrindo outra conexão com o BD.
Funciona, mas não sei se essa é a maneira correta, pois se no segundo insert der um pau por algum motivo, dará problema no relacionamento.
Tem alguma maneira de inserir na TabCliente e atualizar a TabCliente_Empreendimento?
Abaixo seguem os 2 inserts.
Obrigado.
public Cliente incluirCliente(Cliente cliente) throws SQLException, ClienteException {
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
boolean result = false;
try {
StringBuffer sql = new StringBuffer();
sql.append("INSERT INTO ");
sql.append( "TABCLIENTE ");
sql.append( "(NOMECLIENTE,");
sql.append( "DTCADASTRO, ");
sql.append( "DTNASC, ");
sql.append( "SEXO, ");
sql.append( "RG, ");
sql.append( "CPF, ");
sql.append( "ENDERECO, ");
sql.append( "COMPLEMENTO, ");
sql.append( "BAIRRO, ");
sql.append( "CEP, ");
sql.append( "CIDADE, ");
sql.append( "ESTADO, ");
sql.append( "TELEFONERES, ");
sql.append( "TELEFONECOM, ");
sql.append( "TELEFONECEl, ");
sql.append( "EMAIL, ");
sql.append( "MSN, ");
sql.append( "SITUACAO, ");
sql.append( "OBS)");
sql.append("VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
preparedStatement = prepareStatement(sql.toString());
preparedStatement.setString(1, cliente.getNomeCli());
preparedStatement.setDate(2, new java.sql.Date(cliente.getDtCadastro().getTime()));
preparedStatement.setDate(3, new java.sql.Date(cliente.getDtNasc().getTime()));
preparedStatement.setInt(4, cliente.getSexo());
preparedStatement.setString(5, cliente.getRg());
preparedStatement.setString(6, cliente.getCpf());
preparedStatement.setString(7, cliente.getEndereco());
preparedStatement.setString(8, cliente.getCompl());
preparedStatement.setString(9, cliente.getBairro());
preparedStatement.setString(10, cliente.getCep());
preparedStatement.setString(11, cliente.getCidade());
preparedStatement.setInt(12, cliente.getEstado());
preparedStatement.setString(13, cliente.getTelRes());
preparedStatement.setString(14, cliente.getTelCom());
preparedStatement.setString(15, cliente.getTelCel());
preparedStatement.setString(16, cliente.getEmail());
preparedStatement.setString(17, cliente.getMsn());
preparedStatement.setInt(18, cliente.getSituacao());
preparedStatement.setString(19, cliente.getObsCli());
int rows = preparedStatement.executeUpdate();
if(rows > 0){
resultSet = preparedStatement.getGeneratedKeys();
resultSet.setFetchSize(1);
if ( resultSet.next() ) {
int code = resultSet.getInt(1);
cliente.setCodCli(code);
commit();
}
result = true;
}else{
rollback();
throw new SQLException("Erro ao incluir " + cliente);
}
}catch (MySQLIntegrityConstraintViolationException msqlie){
//...
}catch(Exception ex){
//...
}
finally{
preparedStatement.close();
}
return cliente;
}
public boolean incluirTabEmpreendimento_Cliente(int codCli, int codEmp) throws SQLException, TabEmpreendimento_ClienteException {
PreparedStatement preparedStatement = null;
boolean result = false;
try {
StringBuffer sql = new StringBuffer();
sql.append("INSERT INTO ");
sql.append( "TABEMPREENDIMENTO_CLIENTE");
sql.append( "(CODCLIENTE, ");
sql.append( "CODEMP) ");
sql.append("VALUES(?,?)");
preparedStatement = prepareStatement(sql.toString());
preparedStatement.setInt(1, codCli);
preparedStatement.setInt(2, codEmp);
int rows = preparedStatement.executeUpdate();
if(rows > 0){
commit();
result = true;
}else{
rollback();
throw new TabEmpreendimento_ClienteException("Não houve inclusão na tabela TabEmpreendimento_Cliente ");
}
}catch(SQLException sqle){
//...
}catch (Exception e) {
//...
}finally{
preparedStatement.close();
}
return result;
}