Qual a melhor estratégia para inserir ou atualizar valor usando mesmo método?

Não sei se esse é o fórum certo pra essa questão, se não for, pode mover sem problemas.

Estou dando manutenção em um sistema legado bem antigo, que não utiliza nenhum design pattern e muitas coisas estão na mesma classe Java. Para ter uma ideia, na mesma classe está a tela (Swing), a lógica de negócios e o acesso ao DB.

Como o mundo não é perfeito, isso vai continuar assim por muito tempo.

A questão é que tenho um método atualizarDado, que serve tanto para atualizar, como para inserir. Para atualizar utilizo um update e para inserir um insert (sql puro). Para saber se devo atualizar ou inserir, faço um select no DB, se o retorno estiver vazio insiro, senão atualizo. Não acho que isso seja a melhor estratégia, nem que acessar o DB duas vezes seja uma boa prática, mas o que eu posso fazer de diferente? Alguém tem alguma sugestão?

Valeu…

O que é uma gota para quem está todo encharcado? Se não há separação de responsabilidades, não são usados design patterns, etc. acho que isso não é um problema muito grande. O certo mesmo seria refatorar todo o sistema.

Mas respondendo à sua dúvida: eu acho que não há outra alternativa (se é o mesmo método que cuida das duas tarefas ele precisa saber quando deve fazer uma coisa ou outra - e ele usa um select para isso - eu não enxergo outra solução).

Boa tarde

Então para realizar o update vc precisa da condição where onde geralmente se utiliza o registro unico da tabela que geralmente é um ID, o legal seria vc fazer uma condição verficado a existencia desse valor, porque caso seja insert, você não vai ter o ID do registro, seria algo mais ou menos assim:

if(condicao > 0){
   update
}else{
   insert 
}

Com isso você evitaria de acessar o banco de dados 2 vezes.

Falou.

Caio Vinicius,

Parece ser uma boa solução, vou tentar implementar assim.

Abç.

O que me vem a cabeça de imediato é usar o REPLACE (MySQL), ele faz a checagem da chave primária e insere ou atualiza os dados conforme o caso.