2015-12-29 3 views
-3

это бланк формы этот код throw Исключительный набор результатов закрыт ... почему rs не содержит таблицы ?? before i add < < String rsusername = rs.getString ("name"); String rspassword = rs.getString («пароль»); >> всегда печатает worng имя пользователя или парольThrow исключение результирующий набор закрыт

как я могу его решить ???

* PreparedStatement не оказывает никакого влияния на код

код:

final JButton btnNewButton = new JButton("Log in"); 
    btnNewButton.addActionListener(new ActionListener() { 
     @SuppressWarnings("deprecation") 
     public void actionPerformed(ActionEvent arg0) { 

      String password=passwordField.getPassword().toString(); 
      String UserName = textField_1.getText().toString(); 
      try 
      { 
       Class.forName("org.sqlite.JDBC"); 
       Connection con=DriverManager.getConnection("jdbc:sqlite:C:\\Users\\max\\Desktop\\javaproject\\hotel"); 
       String sqlcheck="select * from login where login.Name ='"+UserName+"'and login.password='"+password+"'"; 
       Statement s =con.createStatement(); 
       ResultSet rs=s.executeQuery(sqlcheck); 
       String rsusername=rs.getString("name"); 
       String rspassword=rs.getString("password"); 

       if(rs.next()) 
       { 

       btnNewButton.addMouseListener(new MouseAdapter() { 
        @Override 
         public void mouseClicked(MouseEvent arg0) { 
          Hotel1 hotel=new Hotel1(); 
          hotel.setVisible(true); 
       } 
      }); 

       } 
       else 
        JOptionPane.showMessageDialog(null, "worng user name or password"); 
      } 
      catch(ClassNotFoundException | SQLException e) 
      { 
       JOptionPane.showMessageDialog(null, "class not found exception"+e); 
      } 
+0

Чтобы получить первое значение, вам нужно вызвать 'rs.next()'. Я бы предположил, что нет первого значения, поэтому вы получаете сообщение об ошибке. Где вы закрываете ресурсы ResultSet, Statement и Connection? (Если вы этого не сделаете, у вас будет утечка памяти) –

+0

ok , когда я выполняю этот запрос в sqlite .... получить значение –

ответ

1

Вы должны двигаться вверх вызов rs.next так:

if (rs.next()) { 
    String rsusername=rs.getString("name"); 
    String rspassword=rs.getString("password"); 

Попробуйте это так :

String sqlcheck= 
      "select * from login where" 
      + " login.Name = ? and login.password=? "; 
    try(PreparedStatement s =con.prepareStatement(sqlcheck)) { 
     s.setString(1 , UserName); 
     s.setString(2, password); 
     try(ResultSet rs=s.executeQuery()) { 
      if(rs.next()) { 
      String rsusername=rs.getString("name"); 
      String rspassword=rs.getString("password"); 
      btnNewButton.addMouseListener(new MouseAdapter() { 
       @Override 
        public void mouseClicked(MouseEvent arg0) { 
         Hotel1 hotel=new Hotel1(); 
         hotel.setVisible(true); 
        } 
      }); 
      } else { 
      JOptionPane.showMessageDialog(null, "worng user name or password"); 
      } 
     } 
    } catch(ClassNotFoundException | SQLException e) { 
     JOptionPane.showMessageDialog(null, "class not found exception"+e); 
    } 
+0

i переместить его , но он не вводит (если инструкция) печать "worng имя пользователя или пароль " –

+0

Тогда нет соответствующего пользователя - select не возвращает строки. – Jan

+0

Попробуйте это без того, где один раз (просто выберите * от пользователей), пока этот код не будет работать, а затем заполнить sql, чтобы выполнить проверку входа в систему. Может быть, вы хотите пойти в PreparedStatement? – Jan

Смежные вопросы