Я создал 2 JFrames: фрейм "Patients_Login" и фрейм "Doctors_Login". Я написал метод actionPerformed
в кнопке «Войти» в рамке «Patients_Login», и он работает нормально. Хотя я скопировал и вставил точно такой же код в кнопку «Вход» в кадре «Doctors_Login», но это дает мне эту ошибку:
java.sql.sqlexception: не указано значение для параметра 1
Нажмите здесь, чтобы увидеть захват ошибки
Это код кнопки входа в рамку «Patients_Login» (работает):
btnLogIn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try{
//connecting to database
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/clinic", "root", "newpass");
//verifying ID and password code
String query="select * from patients where P_ID=? and Password=?";
PreparedStatement pst=con.prepareStatement(query);
pst.setString(1, idTXT.getText());
pst.setString(2, passwordField.getText());
ResultSet rs=pst.executeQuery();
int count =0;
while(rs.next()){
count=count+1;
}
if (count ==1){
JOptionPane.showMessageDialog(null, "Welcome!");
patient_login.setVisible(false);
patient_frame.setVisible(true);
patient_appointments.setVisible(false);
}
else{
JOptionPane.showMessageDialog(null, "Incorrect username or password.");
}
rs.close();
pst.close();
//second query: displaying user info in JLabels
String query1="select * from patients where P_ID=?";
PreparedStatement pst1=con.prepareStatement(query1);
pst1.setString(1, idTXT.getText());
ResultSet rs1=pst1.executeQuery();
while (rs1.next()){
IDdraw_LBL.setText(rs1.getString("P_ID"));
namedraw_LBL.setText(rs1.getString("Name"));
msdraw_LBL.setText(rs1.getString("Medical_Situation"));
}
pst1.close();
}catch(Exception exx) {
exx.printStackTrace();
}
}
});
А это код кнопки входа в рамку «Doctor_Login» (выдает ошибку):
btnLogin.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try{
//connecting to database
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/clinic", "root", "newpass");
//verifying ID and password code
String query="select * from doctors where ID=? and Password=?";
PreparedStatement pst=con.prepareStatement(query);
pst.setString(1, docidTXT.getText());
pst.setString(2, passwordField.getText());
ResultSet rs=pst.executeQuery();
int count =0;
while(rs.next()){
count=count+1;
}
if (count ==1){
JOptionPane.showMessageDialog(null, "Welcome!");
Doctor_login.setVisible(false);
doctor_Appointments.setVisible(false);
Doctor_Frame.setVisible(true);
}
else{
JOptionPane.showMessageDialog(null, "Incorrect username or password.");
}
rs.close();
pst.close();
//second query: displaying user info in JLabels
String query1="select * from doctors where ID=?";
PreparedStatement pst1=con.prepareStatement(query1);
pst1.setString(1, docidTXT.getText());
ResultSet rs1=pst1.executeQuery();
while (rs1.next()){
DRnamedraw_LBL.setText(rs1.getString("Name"));
no_of_patientsLBL.setText(rs1.getString("Patients"));
}
pst1.close();
}catch(Exception exx) {
exx.printStackTrace();
}
}
});
Очевидно, что оба кода абсолютно одинаковы, но я изменил имена объектов и операторы sql.
Примечание: ошибка возникает, когда я запускаю проект, прежде чем я нажму кнопку входа в систему.
Примечание2: после нажатия кнопки «ОК» во всплывающем окне с ошибкой проект работает нормально.
Любая помощь или комментарий будут оценены.