public List<EmprestimoEstoque> pesquisarPorTodosOsDadosNaoNulos(EmprestimoEstoque emprestimoEstoque) {
        List<EmprestimoEstoque> emprestimosEstoques = new LinkedList<>();
        Connection connection = conexao.getConnection();
        try {
            String valorDoComandoUm = comandos.get("pesquisarPorTodosOsDadosNaoNulos" + 1);
            String valorDoComandoDois = comandos.get("pesquisarPorTodosOsDadosNaoNulos" + 2);
            List<String> where = new LinkedList<>();
            List<SetCommand> setCommands = new LinkedList<>();

            if (emprestimoEstoque.getCodigo() != null) {
                where.add("emprestimo_emprestimo_estoque_codigo = ?");
                setCommands.add(new SetInt(where.size(), emprestimoEstoque.getCodigo()));
            }
            if (emprestimoEstoque.getEstadoDevolucao() != null) {
                where.add("LOWER(emprestimo_emprestimo_estoque) = ? ");
                setCommands.add(new SetString(where.size(), "%" + emprestimoEstoque.getEstadoDevolucao().toLowerCase() + "%"));
            }

            StringBuilder query = new StringBuilder(valorDoComandoUm);
            if (!where.isEmpty()) {
                query.append(" WHERE ").append(where.remove(0));
                while (!where.isEmpty()) {
                    query.append(" AND ").append(where.remove(0));
                }
            }
            query.append(valorDoComandoDois);

            PreparedStatement preparedStatement = connection.prepareStatement(query.toString());
            query.delete(0, query.length());

            while (!setCommands.isEmpty()) {
                setCommands.remove(0).set(preparedStatement);
            }

            ResultSet resultSet = preparedStatement.executeQuery();
            while (resultSet.next()) {
                Emprestimo emprestimo = new Emprestimo();
                emprestimo.setCodigo(resultSet.getInt("emprestimo_codigo"));
                emprestimoEstoque = new EmprestimoEstoque();
                emprestimoEstoque.setEmprestimo(emprestimo);
                emprestimoEstoque.setEstadoDevolucao(resultSet.getString("emprestimo_emprestimo_estoque_estado_devolucao"));
                emprestimoEstoque.setMotivo(resultSet.getString("emprestimo_emprestimo_estoque_motivo"));
                emprestimoEstoque.setCodigo(resultSet.getInt("emprestimo_emprestimo_estoque_codigo"));
                emprestimoEstoque.setEstoque(new Estoque());
                emprestimoEstoque.getEstoque().setMaterial(new Material());
                emprestimoEstoque.getEstoque().getMaterial().setCodigo(resultSet.getInt("emprestimo_estoque_material_codigo"));
                emprestimosEstoques.add(emprestimoEstoque);
            }
        } catch (SQLException ex) {
            try {
                connection.rollback();
            } catch (SQLException ex1) {
            }
            throw new RuntimeException(ex.getMessage());
        } catch (NullPointerException ex) {
            throw new RuntimeException(ex.getMessage());
        } finally {
            conexao.fecharConnection();
        }
        return emprestimosEstoques;
    }