как использовать JCheckBox для выполнения одного запроса, если он выбран, и другого, если нет

#java #mysql #swing #netbeans

#java #mysql #swing #netbeans

Вопрос:

Я хочу отобразить некоторые записи о сборах студентов в JFrame при нажатии кнопки jbutton после ввода идентификатора студента в JTextField.

Данные о студентах хранятся в базе данных MySQL, таблица studentrolls содержит информацию о студентах с STRollID в качестве первичного ключа и StudentID, BachID в качестве внешнего ключа, а таблица сборов содержит все записи о сборах студентов за прошлые годы и фактический год с STRollID в качестве первичного ключа и BachID в качестве внешнего ключа.

Я хочу отобразить после вставки идентификатора студента в JTextField и нажатия кнопки JButton только фактическую плату за год, если выбран jCheckBoxonlythisyearfee, в противном случае фрейм отобразит всю запись о плате в JTable и на некоторых JLabels.

Я написал этот код, я не получаю никаких ошибок, но когда я запускаю файл, я получаю все записи о плате за обучение, но когда я нажимаю на jcheckboxonly в этом году, ничего не происходит, я не получаю только запись о плате за этот год. Что-то не так с моим кодом? Пожалуйста, помогите.

 private void rSButtonIconDsearchstidActionPerformed(java.awt.event.ActionEvent evt) {
    try {
        Date d = new Date();
        int year = d.getYear();
        int currentYear = year   1900;
        boolean thisyrchecboxisSelected = jCheckBoxonlythisyearfee.isSelected();
        String sqlquerystfeeslist;
        if (thisyrchecboxisSelected) {

            sqlquerystfeeslist = "SELECT * FROM studentrolls, fees WHERE studentrolls.StudentID = ? AND studentrolls.STRollID = fees.STRollID AND studentrolls.BachID = '"
                      currentYear   "' ORDER BY studentrolls.BachID";
        } else {

            sqlquerystfeeslist = "SELECT * FROM studentrolls, fees WHERE studentrolls.StudentID = ? AND studentrolls.STRollID = fees.STRollID ORDER BY studentrolls.BachID";

        }

        PreparedStatement preparedStatement = con.prepareStatement(sqlquerystfeeslist);
        PreparedStatement pst = con.prepareStatement(sqlquerystfeeslist);

        if (!jTextFieldsearchstid.getText().isEmpty()) {

            preparedStatement.setString(1, jTextFieldsearchstid.getText());
            ResultSet resultSet = preparedStatement.executeQuery();

            DefaultTableModel tblModelfee = (DefaultTableModel) jTablestfeeslist.getModel();
            tblModelfee.setRowCount(0);    // to clear the table before inserting new data

            while (resultSet.next()) {

                int stfeebalenceint;
                int feecostint = Integer.parseInt(resultSet.getString("MontantFrais"));
                int paidamountint = Integer.parseInt(resultSet.getString("MontantPayE"));
                stfeebalenceint = feecostint - paidamountint;

                String feestatus;
                if (stfeebalenceint <= 0) {
                    feestatus = "SOLDE";
                } else {
                    feestatus = "NO SOLDE";
                }

                String scolaryearfee = resultSet.getString("BachID");
                String feetype = resultSet.getString("TypeFrais");
                String feecost = String.valueOf(resultSet.getInt("MontantFrais"));
                String paidamount = String.valueOf(resultSet.getInt("MontantPayE"));
                String stfeebalence = String.valueOf(stfeebalenceint);

                String stfeeslistTableData[] = {scolaryearfee, feetype, feecost, paidamount, stfeebalence, feestatus};
                tblModelfee.addRow(stfeeslistTableData);

                int stTotfeecost = 0;
                for (int i = 0; i < jTablestfeeslist.getRowCount(); i  ) {
                    stTotfeecost = stTotfeecost   Integer.parseInt(jTablestfeeslist.getValueAt(i, 2).toString());
                }

                int stTotpaidamount = 0;
                for (int i = 0; i < jTablestfeeslist.getRowCount(); i  ) {
                    stTotpaidamount = stTotpaidamount   Integer.parseInt(jTablestfeeslist.getValueAt(i, 3).toString());
                }

                int stTotfeebalence;
                stTotfeebalence = stTotfeecost - stTotpaidamount;

                String stTotfeestatus;
                if (stTotfeebalence <= 0) {
                    stTotfeestatus = "SOLVABLE";
                } else {
                    stTotfeestatus = "INSOLVABLE";
                }

                jLabelstTotfeecost.setText(Integer.toString(stTotfeecost));
                jLabelstTotpaidamount.setText(Integer.toString(stTotpaidamount));
                jLabelstTotfeebalence.setText(Integer.toString(stTotfeebalence));
                jLabelstTotfeestatus.setText(stTotfeestatus);
            }
        } else {
            JOptionPane.showMessageDialog(this, "Veillez taper le matricule d'un eleve svp.");
        }

    } catch (Exception exception) {
        JOptionPane.showMessageDialog(this, "erreur des donnees: "   exception.getMessage());
    }
}
 

Комментарии:

1. В конце концов, «ничего не происходит, я не получаю только запись о плате за этот год». Что вы имеете в виду? Может быть, «я получаю только запись о плате за этот год»?

2. @HoRn, на самом деле мне нужно, чтобы, если я нажму jcheckbox, в таблице должна отображаться только запись текущего года, иначе она отобразит всю запись. Но когда я запускаю приложение и нажимаю jcheckbox, ничего не происходит. Я не знаю, правильно ли я использовал оператор IF с двумя запросами.

3. 1. Вы пробовали регистрировать if (thisyrchecboxisSelected) { обращения? Добавьте строку журнала в обоих случаях. Это покажет вам, связана ли проблема с интерфейсом. 2. Если интерфейс работает нормально, убедитесь, что запрос работоспособен. Попробуйте.

4. @ HoRn, ты знаешь, что это работает на самом деле, в моем коде нет ничего плохого, но дело в том, что когда я нажимаю jcheckbox, мне придется снова нажать кнопку поиска, чтобы отобразить результат текущего (фактического) года. И если я снова сниму флажок, мне придется снова нажать кнопку поиска, чтобы получить другой результат (я имею в виду все записи). Теперь мне интересно, есть ли способ получить тот же результат, не нажимая дважды кнопку поиска.