#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, мне придется снова нажать кнопку поиска, чтобы отобразить результат текущего (фактического) года. И если я снова сниму флажок, мне придется снова нажать кнопку поиска, чтобы получить другой результат (я имею в виду все записи). Теперь мне интересно, есть ли способ получить тот же результат, не нажимая дважды кнопку поиска.