Relatório por período, com o valor total de cada objeto em uma jTable

Olá, Pessoal!

Estou começando minha vida na programação, então relevem se minha dúvida for simples…

Estou desenvolvendo um sistema com java swing e MySQL, para gerenciamento do estoque de cartuchos e impressoras de uma empresa. Na parte as impressoras, tenho uma tabela onde armazeno a data em que o relatório de total de páginas impressas foi lançado no sistema, o modelo da impressora, e a quantidade de páginas.
Eu gostaria de saber uma forma de conseguir puxar um relatório que me retornasse o seguinte:

Digamos que eu queria saber o total de páginas impressas, por cada impressora, no período de 01/07/2019 a 17/07/2019.

Ex: na consulta com SQL digamos que obtivemos 2 históricos de relatórios para a impr. x (lançamentos no sistema):
o 1 em 05/07/2019, com total de páginas impressas nessa data de 300 pag, e outro lançamento em 10/07/2019, com um total de páginas impressas nessa data de 1.000 pag. Dessa forma, gostaria que na tabela já fosse adicionado o valor total da soma de cada linha encontrada na busca pelo select.

ID / Impressora / Data / Total de páginas
auto incremento / impr. x / pode até ser removida da jTable / 1.300

*Deve-se levar em consideração que no sistema haverão x impressoras cadastradas, o que aumentará a quantidade de linhas acima.


O que eu consegui até agora foi passar o total de páginas impressas de uma impressora, em um determinado período, mas buscando impressora por impressora. Mas gostaria de ter essa informação de forma imediata. Abaixo irei copiar o código até o momento.
Caso precisem de maiores informações é só falar.
Para facilitar, segue o link do código no gitHub: https://github.com/israelitalo/EstoqueCartuchos

Desde já agradeço, pessoal!

//pegando o id da impressora a partir do jComboBox, depois pegando as dadas digitadas no campo e jogando no método.
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
ControlePaginasDao cpd = new ControlePaginasDao();

    String impressora = (String) comboBoxImpressoras.getSelectedItem();
    
    int idImpressora = cpd.getIdJcomboBoxImpressora(impressora);
    
    String dataInicial = txtDataInicial.getText();
    String dataFinal = txtDataFinal.getText();
    
    dataInicial = dataToSql(dataInicial);
    dataFinal = dataToSql(dataFinal);
    
    listarRelatorio(idImpressora, dataInicial, dataFinal);
    
    txtPagImpressas.setText(Integer.toString(getPagImpressas()));
    
} 

//Metodo listarRelatorio
public void listarRelatorio(Integer idImpressora, String dataInicial, String dataFinal){

    ControlePaginasDao cpd = new ControlePaginasDao();
    
    String impressora = (String) comboBoxImpressoras.getSelectedItem();
    
    idImpressora = cpd.getIdJcomboBoxImpressora(impressora);
    
    dataInicial = txtDataInicial.getText();
    dataFinal = txtDataFinal.getText();
    
    dataInicial = dataToSql(dataInicial);
    dataFinal = dataToSql(dataFinal);
    
    List<ControlePaginas>lista = cpd.listar(idImpressora, dataInicial, dataFinal);
    
    DefaultTableModel model = (DefaultTableModel) jTable1.getModel();
    
    model.setNumRows(0);
    
    for(ControlePaginas cp: cpd.listar(idImpressora, dataInicial, dataFinal)){
        
        model.addRow(new Object[]{
            cp.getIdControle(),
            cp.getImpressora(),
            cp.getData(),
            cp.getPaginaTotal()
        });
    }
    //Aqui foi a forma que consegui para somar a coluna de páginas impressas e obter a soma de cada linha.
    int linhas = jTable1.getRowCount();
    int vetor[] = new int[linhas];//Criando vetor com alocação do mesmo tamanho da quantidade de linhas.
    int soma = 0;
    for(int i = 0; i < linhas; i++){
        vetor [i] = (Integer) jTable1.getModel().getValueAt(i, 3);
        soma += vetor[i];
    }
    setPagImpressas(soma);
}

//Método que recebe as informações do banco de dados, para jogar no método listarRelatorio.
public List listar(Integer idImpressora, String dataInicial, String dataFinal){

    String sql = "SELECT c.id_controle, i.modelo, c.data, c.pagina_total  FROM controlepaginas c, impressora i WHERE c.id_impressora = '" + idImpressora + "' AND c.id_impressora = i.id_impressora AND data >= '" + dataInicial + "' AND data <= '" + dataFinal + "' ORDER BY data"; // novo select.

    List<ControlePaginas> lista = new ArrayList<>();
    
    PreparedStatement stmt = null;
    ResultSet rs = null;
    
    try{
        stmt = con.prepareStatement(sql);
        rs = stmt.executeQuery();
        while(rs.next()){
            ControlePaginas cp = new ControlePaginas();
            cp.setIdControle(rs.getInt("id_controle"));
            cp.setImpressora(rs.getString("i.modelo"));
            String data = rs.getString("data");//Converter data 1991-10-05 para 05/10/1991 antes de jogar para a tabela.
            data = dataToJava(data);//Converter data 1991-10-05 para 05/10/1991 antes de jogar para a tabela.
            cp.setData(data);//Converter data 1991-10-05 para 05/10/1991 antes de jogar para a tabela.
            cp.setPaginaTotal(rs.getInt("pagina_total"));
            lista.add(cp);
        }
        return lista;
    } catch (SQLException ex) {
        System.err.println(ex);
    }
    return null;
}

//Métodos que uso para converter datas do java para SQL e do SQL para java.
public String dataToSql(String data){

    String dia = data.substring(0,2);
    String mes = data.substring(3,5);
    String ano = data.substring(6,10);
    
    data = ano + "-" + mes + "-" + dia;
    
    return data;
}

public String dataToJava(String data){
    // 2019-11-05
    String ano = data.substring(0,4);
    String mes = data.substring(5,7);
    String dia = data.substring(8,10);
    
    data = dia + "/" + mes + "/" + ano;
    
    return data;
}