java conexão com banco de dados
não sei se alguem aqui na area de java poderá me responder ou
tenho que ir na area de banco de dados
e por que eu tenho minha classe clienteDao e estou fazendo o insert em tres tabelas al mesmo tempo
estou utilizando o LAST_INSERT_ID esta cadastrando o cliente normalmente mas ,quando eu cadastro o
cliente as fk da tabela que esta relacionada retorna zero.
todas as vezes que eu cadastro um novo cliente a fk retorna zero.
queria saber se tem uma forma correta de implementar isso na minha classe CliienteDAO para que a minha
fk não retorne zero.
esse e o trecho da minha ClienteDAO:
public void cadastrarCliente(Cliente cliente) {
try {
pstm = bd.conectar().prepareStatement(select * from pessoa where pess_nome like ?);
pstm.setString(1, cliente.getNome());
rs = pstm.executeQuery();
if(rs.next()){
JOptionPane.showMessageDialog(null, já existe um cliente cadastrado com este nome !);
}else{
pstm = bd.conectar().prepareStatement(insert into pessoa values(null,?,?,?,?,?,?,?,?,?,?));
pstm.setString(1, cliente.getNome());
pstm.setString(2, cliente.getSexo());
pstm.setString(3, cliente.getIdade());
pstm.setString(4, cliente.getEmail());
pstm.setString(5, cliente.getDatanasc());
pstm.setString(6, cliente.getEstadocivil());
pstm.setString(7, cliente.getCpf());
pstm.setString(8, cliente.getRg());
pstm.setString(9, cliente.getTelefonefixo());
pstm.setString(10, cliente.getCelular());
pstm.executeUpdate();
}
} catch (Exception e) {
e.printStackTrace();
}finally {
bd.desconectar();
}
try{
pstm = bd.conectar().prepareStatement(insert into endereco values(null,LAST_INSERT_ID(),LAST_INSERT_ID(),?,?,?,?,?));
pstm.setString(1, cliente.getEndereco());
pstm.setString(2, cliente.getCidade());
pstm.setString(3, cliente.getBairro());
pstm.setString(4, cliente.getCep());
pstm.setString(5, cliente.getUf());
pstm.executeUpdate();
}catch(Exception e){
e.printStackTrace();
}finally {
bd.desconectar();
}
try{
pstm = bd.conectar().prepareStatement(insert into clientes values(null, LAST_INSERT_ID()));
pstm.executeUpdate();
}catch(Exception e){
e.printStackTrace();
}finally {
bd.desconectar();
}
}
aonde tem o metodo LAST_INSERT-ID(),e retornado zero .
att
Luiz augusto
tenho que ir na area de banco de dados
e por que eu tenho minha classe clienteDao e estou fazendo o insert em tres tabelas al mesmo tempo
estou utilizando o LAST_INSERT_ID esta cadastrando o cliente normalmente mas ,quando eu cadastro o
cliente as fk da tabela que esta relacionada retorna zero.
todas as vezes que eu cadastro um novo cliente a fk retorna zero.
queria saber se tem uma forma correta de implementar isso na minha classe CliienteDAO para que a minha
fk não retorne zero.
esse e o trecho da minha ClienteDAO:
public void cadastrarCliente(Cliente cliente) {
try {
pstm = bd.conectar().prepareStatement(select * from pessoa where pess_nome like ?);
pstm.setString(1, cliente.getNome());
rs = pstm.executeQuery();
if(rs.next()){
JOptionPane.showMessageDialog(null, já existe um cliente cadastrado com este nome !);
}else{
pstm = bd.conectar().prepareStatement(insert into pessoa values(null,?,?,?,?,?,?,?,?,?,?));
pstm.setString(1, cliente.getNome());
pstm.setString(2, cliente.getSexo());
pstm.setString(3, cliente.getIdade());
pstm.setString(4, cliente.getEmail());
pstm.setString(5, cliente.getDatanasc());
pstm.setString(6, cliente.getEstadocivil());
pstm.setString(7, cliente.getCpf());
pstm.setString(8, cliente.getRg());
pstm.setString(9, cliente.getTelefonefixo());
pstm.setString(10, cliente.getCelular());
pstm.executeUpdate();
}
} catch (Exception e) {
e.printStackTrace();
}finally {
bd.desconectar();
}
try{
pstm = bd.conectar().prepareStatement(insert into endereco values(null,LAST_INSERT_ID(),LAST_INSERT_ID(),?,?,?,?,?));
pstm.setString(1, cliente.getEndereco());
pstm.setString(2, cliente.getCidade());
pstm.setString(3, cliente.getBairro());
pstm.setString(4, cliente.getCep());
pstm.setString(5, cliente.getUf());
pstm.executeUpdate();
}catch(Exception e){
e.printStackTrace();
}finally {
bd.desconectar();
}
try{
pstm = bd.conectar().prepareStatement(insert into clientes values(null, LAST_INSERT_ID()));
pstm.executeUpdate();
}catch(Exception e){
e.printStackTrace();
}finally {
bd.desconectar();
}
}
aonde tem o metodo LAST_INSERT-ID(),e retornado zero .
att
Luiz augusto
Luiz Lopes
Curtidas 0
Respostas
Davi Costa
17/11/2011
será q não está dando 0 pq n tem ainda nenhum lá?
Att Davi
Att Davi
GOSTEI 0
Luiz Lopes
17/11/2011
Não eu ja cadastrei varios clientes mas toda vez que eu
cadastro um novo cliente, a chave estrangeira das tabelas
endereço e clientes semprem retornam zero ,não tem um outro
metodo na classe de conexão que retorne o valor correto
da fk ?
cadastro um novo cliente, a chave estrangeira das tabelas
endereço e clientes semprem retornam zero ,não tem um outro
metodo na classe de conexão que retorne o valor correto
da fk ?
GOSTEI 0
Dyego Carmo
17/11/2011
voce terá que executar uma query utilizando o MESMO STATEMENT...
st.createQuery(SELECT LAST_INSERT_ID());
abra ela e o id vai estar no campo que retorna...
mas voce PRECISA fazer isto dentro do MESMO STATEMENT que vc deu o insert, senao vem zerado.
st.createQuery(SELECT LAST_INSERT_ID());
abra ela e o id vai estar no campo que retorna...
mas voce PRECISA fazer isto dentro do MESMO STATEMENT que vc deu o insert, senao vem zerado.
GOSTEI 0
Luiz Lopes
17/11/2011
Não entendi muito o que vc quiz dizer ?
GOSTEI 0
Robson Teixeira
17/11/2011
ele quis dizer pra vc testar usando o Statement invez de vc usar o metodo prepareStatement que retornar o Objeto do Tipo PrepareStatement usar o que retorna um objeto Statement somente ok???
att
robson
att
robson
GOSTEI 0
Luiz Lopes
17/11/2011
tem como vc colocar um exemplo pra mim estou tentando fazer da forma com que vc falou
mais ta dando erro...
att
Luiz augusto...
mais ta dando erro...
att
Luiz augusto...
GOSTEI 0
Luiz Lopes
17/11/2011
Mais alguém pode me ajudar não consegui resolver o meu problema que postei acima...
att
Luiz augusto
att
Luiz augusto
GOSTEI 0