Como melhorar essa lógica?

Preciso executar determinados comandos uma vez só, mas não tô conseguindo.
Tenho uma tela que faz o cadastro de docente e um dos dados a ser informado é se esse docente atua como coordenador em uma determinada coordenadoria. No Banco de Dados existe duas tabelas, Docente e Coordenadoria, essas tabelas tem dois relacionamentos, um chamado de “gerencia” e o outro de “lotado”, ou seja, no relacionamento “gerencia” a cave de docente vai pra coordenadoria, quer dizer que esse docente gerencia aquela coordenadoria. Já em “lotado” a cave de coordenadoria vai pra docente, quer dizer que o docente que receber essa chave vai estar lotado naquela coordenadoria.

Diante disso, eu crio a tabela de coordenadoria sem o atributo de código do docente, assim que o usuário informar qual é o coordenador, o sistema vai executar o SQL que adiciona o atributo “DocCod” em coordenadoria que vai ser o código do docente e apos execução desse SQL o sistema executa outro SQL que transforma esse atributo “DocCod” em uma foreignKey e depois executa o SQL de update que é o SQL que faz o update em coordenadoria passando o código do docente para a tabela de coordenadoria.

Do jeito que estou fazendo acontece o seguinte: Quando eu não fecho a tela o sistema roda de boa sem dá erro, mas quando fecho e abro de novo e tento cadastrar um novo docente o sistema executa esses SQLs, adicionar o atributo “DocCod” em coordenadoria e transformar esse atributo em foreignKey, tudo de novo e aí da erro porquê já existe esse atributo, só funciona quando a tela não é fechada.

Estou usando o eclipse e o postgres. Segue o meu código só com a parte que estou me referindo.
Os comandos que quero executar uma vez são os: inserir.addColuna(); e o inserir.addForeignKey();

Código do botão salvar:

 btnSalvar.addActionListener(new ActionListener() {
	public void actionPerformed(ActionEvent arg0) {
						
		try {
					
			if(rdbtnDisponivel.isSelected()) {
				docente.setStatus("Disponível");
			}else if(rdbtnIndisponivel.isSelected()) {
				docente.setStatus("Indisponível");
			}else if(rdbtnSemidisponivel.isSelected()) {
				docente.setStatus("SemiDisponível");
				if((String)(cbCargo.getSelectedItem())=="Coordenador(a)") {
							
				String selecao1 = (String) (cbCoordenadoria.getSelectedItem());
							
				ResultSet res4 = inserir.executarBusca("select CoordCod from coordenadoria where CoordSigla = '"+selecao1+"'");
							
				while(res4.next()) {
					docente.setCoordenadoria(res4.getInt("CoordCod"));
				}
							
							
				String selecao2 = (String) (cbCoordenador.getSelectedItem());
							
				ResultSet res2 = inserir.executarBusca("select CoordCod from coordenadoria where CoordSigla = '"+selecao2+"'");
				ResultSet res3 = inserir.executarBusca("select DocCod from docente where DocNome = '"+tfNome.getText()+"'");
							
				while(res2.next()){
					coord.setCoordCod(res2.getInt("CoordCod"));
				}
							
				while(res3.next()){
					docente.setDocCod(res3.getInt("DocCod"));
				}
							
				ResultSet res1 = inserir.executarBusca("select docente.CoordCod from docente, coordenadoria where coordenadoria.CoordSigla = '"+selecao2+"' and docente.CoordCod = coordenadoria.CoordCod;");
				cont.setCont(cont.getCont()+0);
				if (!res1.wasNull() && cont.getCont()==0) { //Retorna TRUE se o coordenador(a) NÃO estiver sido especificado(a) ainda.
								
					inserir.addColuna();
					inserir.addForeignKey();
					inserir.coordenadorUpdate(docente,coord);
								
					cont.setCont(cont.getCont()+1);
					cbCoordenador.removeItem(selecao2);
								
				}else if (!res1.wasNull() && cont.getCont()==1){
					cbCoordenador.removeItem(selecao2);
					cont.setCont(cont.getCont()+1);
				}else {
					cbCoordenador.setEnabled(false);
				}			
			}	
		}
					
			inserir.inserir(docente);
					
		} catch (Exception e) {
			e.printStackTrace();
		}
		JOptionPane.showMessageDialog(null, "Cadastro realizado com sucesso.");
				
	}
});

Código do inserir.addColuna():

public void addColuna() {
		
	try {
			
		Statement stm = con.createStatement(); 
		String sql = "ALTER TABLE Coordenadoria ADD COLUMN DocCod Integer";
			
		stm.executeUpdate(sql);

	} catch (Exception e) {
		e.printStackTrace();
	}
}

Código do inserir.addForeignKey():

public void addForeignKey() {
		
	try {
			
		Statement stm = con.createStatement(); 
		String sql = "ALTER TABLE Coordenadoria ADD CONSTRAINT fkCoordenadoriaDocente FOREIGN KEY(DocCod) REFERENCES Docente (DocCod)";
			
		stm.executeUpdate(sql);

	} catch (Exception e) {
		e.printStackTrace();
	}
}