ユーザーがユーザー名とパスワードを入力してログインボタンを押すと、ユーザー名とパスワードがSQLステートメントで送信され、データベース内のユーザーと照合されるログインシステムをセットアップしようとしています。ユーザー名とパスワードが正しい場合 (データベースで一致する場合)、データベースからのすべてのユーザー データを使用してユーザー オブジェクトが作成され、ユーザーが管理ダッシュボードに表示されます。
結果セットなどについて多くの調査を行い、多くのコードを実行した後でも、システムで機能させることができません。誰でもこれを行う良い方法を教えてもらえますか? または、このコードに明らかな問題があるかどうか教えてください。
ユーザー名とパスワードを入力してログインを押すと、コンソールにエラーが表示されます。
java.sql.SQLException: Invalid column index
at oracle.jdbc.driver.OraclePreparedStatement.setStringInternal(OraclePreparedStatement.java:5321)
at oracle.jdbc.driver.OraclePreparedStatement.setString(OraclePreparedStatement.java:5309)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.setString(OraclePreparedStatementWrapper.java:280)
at database.UserOperations.validateLog(UserOperations.java:45)
at gui.Login$2.mouseClicked(Login.java:77)
GUIコードの一部
JButton btnLogin = new JButton("Login");
btnLogin.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
UserOperations userOperations = new UserOperations();
ResultSet rset = userOperations.validateLog(textFieldUsername.getText(), textFieldPassword.getText());
User user = null;
try {
if (rset.next()) {
user = new User(rset.getInt("userID"), rset.getString("userName"), rset.getString("userPassword"), rset.getString("securityQuestion"), rset.getString("securityAnswer"),
rset.getInt("adminRights"), rset.getString("email"), rset.getString("fName"), rset.getString("phoneNumber"), rset.getString("department"));
dispose();
AdminDashboard admin = new AdminDashboard();
admin.setVisible(true);
}
else{
JOptionPane.showMessageDialog(null, "Login fail!", "Error", JOptionPane.WARNING_MESSAGE);
}
} catch (SQLException e2) {
e2.printStackTrace();
}
}
});
validateLogin() メソッド
public ResultSet validateLog(String username, String userpassword)
{
try {
String sql = "SELECT userid, username, userpassword, securityquestion, securityanswer, adminrights, email, fname, phonenumber, department FROM systeuser WHERE username = ? AND userpassword = ?";
stmt = conn.prepareStatement(sql);
stmt.setString (2, username);
stmt.setString (3, userpassword);
rset = stmt.executeQuery ( );
}
catch(Exception e){
e.printStackTrace ( );
JOptionPane.showMessageDialog (null, "Login Failed", null, JOptionPane.WARNING_MESSAGE);
}
return rset;
}