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();
}
}