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.