Как я могу использовать Swing jProgressBar в java для увеличения до 100% при вставке записей из jTable в базу данных? - PullRequest
0 голосов
/ 27 мая 2020

Я попытался выполнить следующий код, но проблема в том, что jProgressBar обновляется и увеличивается только на значение, когда все действия являются дополнительными. Я бы использовал sh полосу для постепенного увеличения шага за шагом, так как это очень сложная задача.

    excelProgressBar.setValue(0);
    allLabel1.setText("");
    allLabel2.setText("");

    DefaultTableModel ImportFromExcelFormModel = (DefaultTableModel) importExcelTable.getModel();
    int jTableRows = importExcelTable.getRowCount();

    allLabel2.setText(String.valueOf(jTableRows));

    for (int i = 0; i < jTableRows; i++) {

        excelProgressBar.setValue(i + 1);

        importedExcelMemberName = ImportFromExcelFormModel.getValueAt(i, 0).toString();
        importedExcelIDNumber = ImportFromExcelFormModel.getValueAt(i, 1).toString();
        importedExcelMemberNumber = ImportFromExcelFormModel.getValueAt(i, 2).toString();
        importedExcelPayrollNo = ImportFromExcelFormModel.getValueAt(i, 3).toString();
        importedExcelSalaryAccount = ImportFromExcelFormModel.getValueAt(i, 4).toString();
        importedExcelCellphone = ImportFromExcelFormModel.getValueAt(i, 5).toString();
        importedExcelEmployer = ImportFromExcelFormModel.getValueAt(i, 6).toString();
        importedExcelJan = ImportFromExcelFormModel.getValueAt(i, 7).toString();
        importedExcelFeb = ImportFromExcelFormModel.getValueAt(i, 8).toString();
        importedExcelMarch = ImportFromExcelFormModel.getValueAt(i, 9).toString();
        importedExcelApril = ImportFromExcelFormModel.getValueAt(i, 10).toString();
        importedExcelMay = ImportFromExcelFormModel.getValueAt(i, 11).toString();
        importedExcelJune = ImportFromExcelFormModel.getValueAt(i, 12).toString();
        importedExcelJuly = ImportFromExcelFormModel.getValueAt(i, 13).toString();
        importedExcelAugust = ImportFromExcelFormModel.getValueAt(i, 14).toString();
        importedExcelSept = ImportFromExcelFormModel.getValueAt(i, 15).toString();
        importedExcelOctober = ImportFromExcelFormModel.getValueAt(i, 16).toString();
        importedExcelNovemebr = ImportFromExcelFormModel.getValueAt(i, 17).toString();
        importedExcelDecember = ImportFromExcelFormModel.getValueAt(i, 18).toString();

        now = LocalDateTime.now();
        captureDate = dtf1.format(now);

        try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/tntdividend", "root", "");

            ps = con.prepareStatement("INSERT INTO dividedpayslip( MemberName, IDNumber, MemberNo, PayrollNo, SalaryAccount, CellPhoneNo, "
                    + "Employer, Jan, Feb, March, April, May, June, July, Aug, Sept, Oct, Nov, DecMonth ) " 
                    + "values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");

            ps.setString(1, importedExcelMemberName);
            ps.setString(2, importedExcelIDNumber);
            ps.setString(3, importedExcelMemberNumber);
            ps.setString(4, importedExcelPayrollNo);
            ps.setString(5, importedExcelSalaryAccount);
            ps.setString(6, importedExcelCellphone);
            ps.setString(7, importedExcelEmployer);
            ps.setString(8, importedExcelJan);
            ps.setString(9, importedExcelFeb);
            ps.setString(10, importedExcelMarch);
            ps.setString(11, importedExcelApril);
            ps.setString(12, importedExcelMay);
            ps.setString(13, importedExcelJune);
            ps.setString(14, importedExcelJuly);
            ps.setString(15, importedExcelAugust);
            ps.setString(16, importedExcelSept);
            ps.setString(17, importedExcelOctober);
            ps.setString(18, importedExcelNovemebr);
            ps.setString(19, importedExcelDecember);

            ps.executeUpdate();
            ps.close();
            con.close();

            allLabel2.setText(String.valueOf(dcf.format(jTableRows)));

        } catch (ClassNotFoundException | SQLException | InstantiationException | IllegalAccessException e) {
            System.out.println(e);
            JOptionPane.showMessageDialog(this, " Error !!", "Error!" + e, JOptionPane.ERROR_MESSAGE);
        }

        allLabel1.setText(String.valueOf(dcf.format(i + 1)));

        System.out.println("Inserted " + i);
    }
    JOptionPane.showMessageDialog(null, dcf.format(jTableRows) + " Records Processed Successfully");
    excelProgressBar.setValue(0);

Приведенный выше код работает хорошо, и данные хорошо вставляются в мою базу данных. Большая проблема в том, что индикатор выполнения быстро обновляется только в конце программы после ожидания около 7 минут. Пожалуйста, помогите.

...