2017-01-20 1 views
-3

Пожалуйста, помогите мне. Этот код не показывает ошибки, но когда он запущен и закончен, отображается ошибка.Ошибка кода «If» и «ResultSet»: SQLExpection

Это мой код:

private void jBtn_UpdateActionPerformed(java.awt.event.ActionEvent evt {            

String user_id = txt_UserID.getText(); 

String cur_pass = txt_CurrentPassword.getText(); 

String new_pass = txt_NewPassword.getText(); 
    try{ 
     Connection c = DBConnection.dbconmethod(); 
     Statement s = c.createStatement(); 
     ResultSet rs = s.executeQuery("SELECT * from admin_data"); 

    while(rs.next()){ 
     String userid = rs.getString("user_id"); 
     String pass = rs.getString("password"); 
     if(user_id.equals(userid) && cur_pass.equals(pass)){ 
      s.executeUpdate("UPDATE admin_data SET password='"+new_pass+"'"); 
      UIManager.put("OptionPane.messageFont", new Font("Monospaced", Font.BOLD, 22)); 
      JOptionPane.showMessageDialog(new view.AdminPrivacy(), "Password Succesfully Changed!", null, JOptionPane.INFORMATION_MESSAGE); 

     txt_UserID.setText(null); 
     txt_CurrentPassword.setText(null); 
     txt_NewPassword.setText(null); 

     }else{ 
      UIManager.put("OptionPane.messageFont", new Font("Monospaced", Font.BOLD, 22)); 
      JOptionPane.showMessageDialog(new view.AdminPrivacy(), "Error : Invalid Data.", "Error Message", JOptionPane.ERROR_MESSAGE); 
     } 

     c.close(); 
     s.close(); 

    } 

    } catch (Exception e) { 
     e.printStackTrace();  
    } 

}  

Это ошибка: https://i.stack.imgur.com/8COxh.png

+3

Пожалуйста, поставьте код и сообщение об ошибке, как * Текст * в этом вопросе. .. тогда обратите внимание, что вы закрываете соединение и оператор * в цикле * ... –

+1

@JonSkeet, ok .. подождать минуту plz ... –

+0

Вам следует рассмотреть возможность использования [try with resources] (http: // stackoverflow.com/questions/26516020/try-with-resources-vs-try-catch) вместо базового блока try-catch. Это защитит вас от такой ошибки. – azurefrog

ответ

0

Вы закрыть соединение и заявление, в то время цикла.

while(rs.next()) { 
    ... 
    c.close(); 
    s.close(); 
} 

Попробуйте использовать, наконец, пункт (после этого catch (Exception) пункта) и закрыть такие заявления есть или использовать ARM block.

Блок ARM: Это также автоматически должно обрабатывать соединение.

try(Connection c = DBConnection.dbconmethod(); 
     Statement s = c.createStatement();) { 
    ... 
} 
catch(Exception e) { ... } 
0

Вы закрываете ваш connection и ваша statement каждая итерация так вот пример безопасен, как вы должны закрыть соединение:

try { 
     //your code 
    } catch (SQLException e) { 
     //part of exception 
    } finally { 
     //close your statement and your connection 
     if (statement != null) { 
      try { 
       statement.close(); 
      } catch (SQLException ex) { 
      } 
     } 
     if (connection != null) { 
      try { 
       connection.close(); 
      } catch (SQLException ex) { 
      } 
     } 
    } 
Смежные вопросы