Bom dia pessoal venho tirar uma duvida com você afim de aprimorar meus conhecimentos.
Tenho um método que recupera os valores do banco e verifica os que são nulos, ate ai tudo bem,
mas estou tentando fazer um update neste campo onde contém os valores nulos, mas a minha duvida é,
como posso fazer para criar um update onde eu possa passar os valores do id para o script sql sem ter que chama-lo varias vezes.
Ex: em um update direto faríamos assim: update tabela set coluna = ? where id in(?). usando o in para vários valores eu gostaria de variar os valores da coluna e do id sem precisar repetir a chamada do sql toda vez que fizer a chamada do método de atualização.
Codigo:
Tenho duas classes uma DAO que tras os registros contendo o campo a ser atualizado com valores nulos e uma classe que recupera estes valores e chama o metodo de atualização para alterar os registros da tabela produto1.
public void UpdadeProduto1(String valorParaAtualizar, int codigoID) throws ClassNotFoundException, SQLException{
Connection con = ConectaBD.getConnection(banco);
PreparedStatement stmt = null;
String sql = "UPDATE tabela SET coluna = "+valorParaAtualizar+" WHERE codigoID in ("+codigoID+")";
try {
stmt = con.prepareStatement(sql);
stmt.executeUpdate();
JOptionPane.showMessageDialog(null, "Informações salvas com sucesso.");
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, "Erro ao atualizar informações na tabela. " + ex);
}finally{
ConectaBD.closeConnection(con, stmt);
}
}
private void comparaResultados() throws ClassNotFoundException, SQLException, Exception {
Banco1 b1dao = new Banco1DAO();
Banco2 b2dao = new Banco2DAO();
List<Produtos1> listab1 = b1dao.listaProdutos1();
List<Produtos2> listab2 = b2dao.listaProdutos2();
StringBuilder sb = new StringBuilder();
lblResult.setText(String.valueOf(listaf.size()));
for (Banco2 b2 : listab2) {
for (Banco1 b1 : listab1) {
if (b1.getCodProd1().equals(b2.getCodProd2())) {
b1dao.UpdadeProduto1(b2.getCampoParaAtualizar,b1.getCodID);
}
}
}
txtAreaRes.append(sb.toString());
}
Neste exemplo eu tenho um metodo na classe Banco1DAO que traz somente os registros que contiverem valores nulos na tabela produto1.
Tudo isso é uma representação do meu problema, mas tentei implementar desta forma.
Será que poderia fazer de uma forma mais otimizada e como eu faria a chamada do metodo update sem repetir toda a instrução sql?