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;
}