@Override
  public List<MateriaPrima> pesquisar(String pesquisa) throws Exception {

    List<MateriaPrima> materiasPrimas = new ArrayList<>();
    PreparedStatement ps = null;
    ResultSet rs = null;

    // string query do banco
    String sql =
        "SELECT id, codigo,  nome, estoque, unidade, fabricacao, vencimento, descricao FROM materiaprima WHERE codigo = ? OR nome LIKE ?";

    // chama uma instância da Connection e tenta realizar uma conexão com o banco através do
    // AutoCloseable
    try (Connection conn = ConnectionProvider.getInstance().getConnection()) {

      // seta a string para fazer a busca
      ps = conn.prepareStatement(sql);
      ps.setString(1, pesquisa);
      ps.setString(2, "%" + pesquisa + "%");

      rs = ps.executeQuery();

      while (rs.next()) {

        // da um get nos atributos do objeto materiaprima
        MateriaPrima materiaprima = new MateriaPrima();

        materiaprima.setId(rs.getLong("id"));
        materiaprima.setCodigo(rs.getString("codigo"));
        materiaprima.setNome(rs.getString("nome"));
        materiaprima.setEstoque(rs.getDouble("estoque"));
        materiaprima.setUnidade(rs.getLong("unidade"));
        materiaprima.setFabricacao(rs.getDate("fabricacao").toLocalDate());
        materiaprima.setVencimento(rs.getDate("vencimento").toLocalDate());
        materiaprima.setDescricao(rs.getString("descricao"));

        // adiciona o objeto materiaprima no arrayList
        materiasPrimas.add(materiaprima);
      }

      // fecha as conexões
      ps.close();
      rs.close();
      conn.close();

    }
    // trata, caso de uma exceção
    catch (Exception e) {
      System.out.println("Houve um erro ao pesquisar o matéria prima");
    }
    // retorna o array
    return materiasPrimas;
  }
  public List<MateriaPrima> listar() throws Exception {

    // string query do banco
    String sql =
        "SELECT id, codigo,  nome, estoque, unidade, fabricacao, vencimento, descricao FROM materiaprima";
    PreparedStatement ps = null;
    ResultSet rs = null;
    List<MateriaPrima> materiasprimas = null;

    // chama uma instância da Connection e tenta realizar uma conexão com o banco através do
    // AutoCloseable
    try (Connection conn = ConnectionProvider.getInstance().getConnection()) {
      ps = conn.prepareStatement(sql);
      rs = ps.executeQuery();
      materiasprimas = new ArrayList<MateriaPrima>();
      while (rs.next()) {
        // da um get nos atributos do objeto matéria-prima
        MateriaPrima materiaPrima = new MateriaPrima();
        materiaPrima.setId(rs.getLong("id"));
        materiaPrima.setCodigo(rs.getString("codigo"));
        materiaPrima.setNome(rs.getString("nome"));
        materiaPrima.setEstoque(rs.getDouble("estoque"));
        materiaPrima.setUnidade(rs.getLong("unidade"));
        if (rs.getDate("fabricacao") != null)
          materiaPrima.setFabricacao(rs.getDate("fabricacao").toLocalDate());
        if (rs.getDate("vencimento") != null)
          materiaPrima.setVencimento(rs.getDate("vencimento").toLocalDate());
        materiaPrima.setDescricao(rs.getString("descricao"));

        // adiciona o objeto materiaPrima no arrayList
        materiasprimas.add(materiaPrima);
      }

      // fecha as conexões
      ps.close();
      conn.close();

    }
    // trata, caso de uma exceção
    catch (SQLException e) {
      System.out.println("Erro ao listar materiaPrima\n" + e);
    }
    // retorna o array
    return materiasprimas;
  }