Dúvida em sintaxe SQL - update [RESOLVIDO]

Olá,

Estou fazendo um projeto para a faculdade onde tenho que criar um banco de dados de DOAÇÃO DE ÓRGÃOS e realizar algumas operações como insert, update, delete e list através de código em java. O banco já está feito no MySQL, e é o seguinte:
São 4 tabelas… DOADOR, RECEPTOR, ÓRGÃO e ESTOQUE, onde ESTOQUE tem a própria chave primária e recebe 3 chaves estrangeiras, uma de cada uma das outras tabelas (as outras 3 não possuem chave estrangeira de nada)…
No meu código java já fiz tudo relacionado a doador, receptor e órgão, e agora estou trabalhando com as chaves estrangeiras de ESTOQUE, e tendo MUITAS dúvidas. Uma delas é como fazer o comando do update para atualizar o meu estoque.

A minha nomenclatura é a seguinte

esId // id do ESTOQUE, chave primária

esDoId // referência da id do doador (doId), chave estrangeira que veio de de DOADOR
esReId // (reId) idem para RECEPTOR
esOrgId // (orgId) idem para ÓRGÃO

eu tenho que fazer no meu prepareStatement o update, mas como pegar essas estrangeiras neste update?

algo do tipo

“update estoque set ??? where esId = ?”

como dar update nessas estrangeiras no comando, sem que elas percam sua referência e me aponte erro de integridade??
Como ficaria este update gente???

segue abaixo como está o código

	public void altera(Estoque estoque) {

		String sql = "update estoque DESCOBRIR COMO FAZ!? where esId=?";

		try {

			PreparedStatement ps = this.connection.prepareStatement(sql);

			ps.setInt(1, estoque.getDoador().getDoId());
			ps.setInt(2, estoque.getReceptor().getReId());
			ps.setInt(3, estoque.getOrgao().getOrgId());
			ps.setInt(4, estoque.getEsId());

			ps.execute();
			ps.close();

		} catch (SQLException e) {

			throw new RuntimeException(e);

		}
	
	}

Obrigada! :slight_smile:

Boa noite Sandra,

Não entendi muito bem a sua pergunta…
Se o problema for sintaxe, ficaria assim:

Onde campo é um campo da tabela estoque.

Se o problema não é sintaxe, vc quer verificar se a chave estrangeira realmente existe antes de alterar no banco?

Um abraço

Já utilizei uma vez em um projeto de teste que fiz, dê uma olhada nesse método acho que pode ajudar.

public void atualizaPessoa(Pessoa p) {
			String sql = "update Pessoa set nome =(?)"+
						 "where codigo=(?)";   
			try{
				PreparedStatement prepared = conexao.prepareStatement(sql);
				prepared.setString(1, p.getNome());
				prepared.setInt(2, p.getNumero());
				prepared.executeUpdate();
			}catch (SQLException e){
				e.printStackTrace();
			}finally{
				GerenteConexao.fechaConexao();
			}
			
		}

Espero que ajude. :smiley:

Abraços.

Acesse http://programejava.blogspot.com/

Ei rapazes… postei aqui depois de horas quebrando a cabeça, e agora pouco consegui resolver meu problema
o que eu estava querendo saber era o seguinte, agora já confirmado que é assim:

String sql = "update estoque e set e.esDoId=?, e.esReId=?, e.esOrgId=? where esId=?";

Eu tentei N coisas pq não acreditava que era assim… achei que chamando direto da tabela ESTOQUE as estrangeiras, eu ia perder a referência… e acabei tentando de tudo quer jeito fazer esse update pegando as variáveis das tabelas que tem as primárias referentes a essas estrangeiras, mas assim deu tudo certo :smiley:

Hehe

Essas dúvidas na hora do desenvolvimento são tão divertidas :roll

Que bom que deu certo.

Um beijo