public boolean alterar(MateriaPrima materiaPrima) throws Exception {
    boolean status = false;

    // string query do banco
    String sql =
        " UPDATE materiaprima SET codigo=?, nome=?, estoque=?, unidade=?, fabricacao=?,"
            + " vencimento=?, descricao=? where id=?";
    PreparedStatement ps = 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()) {
      // seta os atributos do objeto matéria-prima, fazendo a alteração.
      ps = conn.prepareStatement(sql);
      ps.setString(1, materiaPrima.getCodigo());
      ps.setString(2, materiaPrima.getNome());
      ps.setDouble(3, materiaPrima.getEstoque());
      ps.setLong(4, materiaPrima.getUnidade());

      if (materiaPrima.getFabricacao() != null) {
        ps.setDate(5, Date.valueOf(materiaPrima.getFabricacao()));
      } else {
        ps.setNull(5, Types.DATE);
      }

      if (materiaPrima.getVencimento() != null) {
        ps.setDate(6, Date.valueOf(materiaPrima.getVencimento()));
      } else {
        ps.setNull(6, Types.DATE);
      }

      ps.setString(7, materiaPrima.getDescricao());
      ps.setLong(8, materiaPrima.getId());

      if (ps.executeUpdate() != 0) {
        status = true;
      }

      // fecha as conexões
      ps.close();
      conn.close();
    }
    // trata, caso de uma exceção
    catch (SQLException e) {
      System.out.println("Erro ao alterar a materiaPrima\n" + e);
    }
    // retorna true ou false, dizendo se o metodo foi executado com sucesso.
    return status;
  }
  @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 boolean excluir(MateriaPrima materiaPrima) throws Exception {
    boolean status = false;

    // string query do banco
    String sql = "DELETE FROM materiaprima WHERE id = ?";

    PreparedStatement ps;

    // 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 o id da matéria-prima, e excluir o objeto
      ps = conn.prepareStatement(sql);
      ps.setLong(1, materiaPrima.getId());

      if (ps.executeUpdate() != 0) {
        status = true;
      }

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

    }
    // trata, caso de uma exceção
    catch (Exception e) {
      System.out.println("Houve um erro ao tentar deletar a materiaPrima");
    }
    // retorna true ou false, dizendo se o metodo foi executado com sucesso.
    return status;
  }
  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;
  }