1
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

    if (evt.getSource() == jButton1) {

        String ab = jTextField1.getText();
        String bc = jPasswordField1.getText().toString();
        String cd = jTextField2.getText();
        String de = jTextField3.getText();
        PreparedStatement ps1 = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            Connection c = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "system", "hr");
            ps = c.prepareStatement("Select User_Name from AdminLogin where Password =?");
            ps.setString(1, bc);

            rs = ps.executeQuery();
            rs.next();

            if (ab.equals(rs.getString(1))) {

                ps1 = c.prepareStatement("Update AdminLogin SET Date1=?,Time=? WHERE Password=?");
                ps1.setString(1, cd);
                ps1.setString(2, de);
                ps1.setString(3, bc);
                int e = ps1.executeUpdate();
                JOptionPane.showMessageDialog(this, "Welcome", "Logged In", JOptionPane.INFORMATION_MESSAGE);
                //MainMenuAAI mainMenuAAI = new MainMenuAAI();
                //setVisible(false);}
            } else if (!(ab.equals(rs.getString(1)))) {
                JOptionPane.showMessageDialog(this, "<html>YOU ARE NOT A<br>ADMIN</br></html>", "ERROR", JOptionPane.ERROR_MESSAGE);
                //AdminLogin admin=new AdminLogin();
                //setVisible(false);
            }

            c.close();
        } catch (Exception e) {

            System.out.println(e);
        }
    }// TODO add your handling code here:
}

コードではすべてが正常に機能しています。内部のコードを実行しています

if(ab.equals(rs.getString(1)))

「ようこそ」は表示されますが、内部には表示されません

if(!(ab.equals(rs.getString(1))))

間違ったユーザー名またはパスワードを入力するたびに、エラーが表示されます

java.sql.SQLException: 使い果たされた結果セット

4

1 に答える 1

3

間違ったユーザー名またはパスワードを入力すると、レコードが返されないため、正解です。したがって、rs.next();この場合に を使用すると、空の結果セットの最初の行にアクセスしようとしています! そして、それが例外をスローしている場所です。

次のようにコードを修正できます。

rs = ps.executeQuery();
//rs.next();
int counter=0;
while (rs.next()) {
    counter++;
    if (ab.equals(rs.getString(1))) {
        ps1 = c.prepareStatement("Update AdminLogin SET Date1=?,Time=? WHERE Password=?");
        ps1.setString(1, cd);
        ps1.setString(2, de);
        ps1.setString(3, bc);
        int e = ps1.executeUpdate();
        JOptionPane.showMessageDialog(this, "Welcome", "Logged In", JOptionPane.INFORMATION_MESSAGE);
        //MainMenuAAI mainMenuAAI = new MainMenuAAI();
        //setVisible(false);}
    } 
}
if(counter==0){
    JOptionPane.showMessageDialog(this, "<html>YOU ARE NOT A<br>ADMIN</br></html>", "ERROR", JOptionPane.ERROR_MESSAGE);
}
于 2013-07-18T06:07:43.047 に答える