Como melhorar o codigo?

Boas, estou a criar um sistema de registo de clientes. Neste pedaço de código está um método que serve para alterar a informação do cliente. Como poderia melhorar o codigo (por exemplo diminuir os ifs)?

 private static void alterarDB(Cliente clienteNew, Cliente clienteOld, Statement stmt) throws SQLException {
    int id1 = clienteNew.getId();
    if (!clienteOld.getNome().equalsIgnoreCase(clienteNew.getNome())) {
        stmt.executeUpdate("UPDATE CLIENTES SET NOME = '" + clienteNew.getNome() + "' WHERE ID = " + id1 + ";");
        criarLog("Ficha do cliente: " + clienteOld.getNome() + " foi atualizada -- NOME=" + clienteNew.getNome());
    }
    if (!clienteOld.getData_nascimento().equalsIgnoreCase(clienteNew.getData_nascimento())) {
        stmt.executeUpdate("UPDATE CLIENTES SET DATA_NASCI = '" + clienteNew.getData_nascimento() + "' WHERE ID = " + id1 + ";");
        criarLog("Ficha do cliente: " + clienteOld.getNome() + " foi atualizada -- DATA NASCIMENTO=" + clienteNew.getData_nascimento());
    }
    if (!clienteOld.getMorada().equalsIgnoreCase(clienteNew.getMorada())) {
        stmt.executeUpdate("UPDATE CLIENTES SET MORADA = '" + clienteNew.getMorada() + "' WHERE ID = " + id1 + ";");
        criarLog("Ficha do cliente: " + clienteOld.getNome() + " foi atualizada -- MORADA=" + clienteNew.getMorada());
    }
    if (!clienteOld.getPais().equalsIgnoreCase(clienteNew.getPais())) {
        System.out.println("PAIS: " + clienteNew.getPais() + " - " + clienteOld.getPais());
        stmt.executeUpdate("UPDATE CLIENTES SET PAIS = '" + clienteNew.getPais() + "' WHERE ID = " + id1 + ";");
        criarLog("Ficha do cliente: " + clienteOld.getNome() + " foi atualizada -- PAIS=" + clienteNew.getPais());
    }
    if (!clienteOld.getNacionalidade().equalsIgnoreCase(clienteNew.getNacionalidade())) {
        stmt.executeUpdate("UPDATE CLIENTES SET NACIONALIDADE = '" + clienteNew.getNacionalidade() + "' WHERE ID = " + id1 + ";");
        criarLog("Ficha do cliente: " + clienteOld.getNome() + " foi atualizada -- NACIONALIDADE=" + clienteNew.getNacionalidade());
    }
    if (clienteOld.getBI() - clienteNew.getBI() != 0) {
        stmt.executeUpdate("UPDATE CLIENTES SET BI = '" + clienteNew.getBI() + "' WHERE ID = " + id1 + ";");
        criarLog("Ficha do cliente: " + clienteOld.getNome() + " foi atualizada -- BI=" + clienteNew.getBI());
    }
    if (!clienteOld.getTipoIndentificaçao().equalsIgnoreCase(clienteNew.getTipoIndentificaçao())) {
        stmt.executeUpdate("UPDATE CLIENTES SET TIPO_IDENT = '" + clienteNew.getTipoIndentificaçao() + "' WHERE ID = " + id1 + ";");
        criarLog("Ficha do cliente: " + clienteOld.getNome() + " foi atualizada -- TIPO IDENTIFICAÇAO=" + clienteNew.getTipoIndentificaçao());
    }
    if (!clienteOld.getApartamentos().get(0).equalsIgnoreCase(clienteNew.getApartamentos().get(0))) {
        System.out.println(clienteNew.getApartamentos() + "  -  " + clienteOld.getApartamentos());
        List<String> c = new ArrayList<>(clienteNew.getApartamentos());
        c.removeAll(clienteOld.getApartamentos());
        String apartamentoString = "";
        for (String apartamento : c) {
            apartamentoString = apartamento;
        }
        stmt.executeUpdate("UPDATE CLIENTES SET APART = '" + apartamentoString + "' WHERE ID = " + id1 + ";");
        criarLog("Ficha do cliente: " + clienteOld.getNome() + " foi atualizada -- TIPO APARTAMENTOS=" + apartamentoString);
    }

    if (!clienteOld.getApartamentos().get(0).equalsIgnoreCase(clienteNew.getApartamentos().get(0))) {
        List<String> c = new ArrayList<>(clienteNew.getEstadias());
        //c.remove(clienteOld.getEstadias().get(clienteOld.getEstadias().size()-1));
        c.removeAll(clienteOld.getEstadias());
        String estadiaString = "";
        for (String estadia : c) {
            estadiaString = estadia;
        }

        stmt.executeUpdate("UPDATE CLIENTES SET ESTADIA = '" + estadiaString + "' WHERE ID = " + id1 + ";");
        criarLog("Ficha do cliente: " + clienteOld.getNome() + " foi atualizada -- ESTADIAS=" + estadiaString);
    }
    if (!clienteOld.getEntrada().equalsIgnoreCase(clienteNew.getEntrada())) {
        stmt.executeUpdate("UPDATE CLIENTES SET ENTRADA = '" + clienteNew.getEntrada() + "' WHERE ID = " + id1 + ";");
        criarLog("Ficha do cliente: " + clienteOld.getNome() + " foi atualizada - ENTRADA=" + clienteNew.getEntrada());
    }
    if (!clienteOld.getSaida().equalsIgnoreCase(clienteNew.getSaida())) {
        stmt.executeUpdate("UPDATE CLIENTES SET SAIDA = '" + clienteNew.getSaida() + "' WHERE ID = " + id1 + ";");
        criarLog("Ficha do cliente: " + clienteOld.getNome() + " foi atualizada - SAIDA=" + clienteNew.getSaida());
    }
    if (clienteOld.getTelemovel() - clienteNew.getTelemovel() != 0) {
        stmt.executeUpdate("UPDATE CLIENTES SET TELEMOVEL = '" + clienteNew.getTelemovel() + "' WHERE ID = " + id1 + ";");
        criarLog("Ficha do cliente: " + clienteOld.getNome() + " foi atualizada - TELEMOVEL=" + clienteNew.getTelemovel());
    }
    if (!clienteOld.getAgencia().equalsIgnoreCase(clienteNew.getAgencia())) {
        stmt.executeUpdate("UPDATE CLIENTES SET AGENCIA = '" + clienteNew.getAgencia() + "' WHERE ID = " + id1 + ";");
        criarLog("Ficha do cliente: " + clienteOld.getNome() + " foi atualizada - AGENCIA=" + clienteNew.getAgencia());
    }
}

Não concatene os valores no SQL, use parametros.

Faz um UPDATE único.

Faz o log via trigger. Por aplicação é furado.

1 curtida