2017-02-06 1 views
1

Dans mon projet de gestion de la paie des employés, le champ de texte de recherche ne fonctionne pas .. j'utilise mysql workbench et java .. ne renvoie aucune valeur .. Comment puis-je résoudre cette erreur ? Comment fonctionne mon champ de recherche?La zone de texte de recherche ne renvoie aucune valeur

Mon codage est ici:

enter code here 

     private void txt_searchKeyReleased(java.awt.event.KeyEvent evt) {          
    try{ 
     String sql ="select * from Staff_information where id=? "; 
    pst=conn.prepareStatement(sql); 
    pst.setString(1,txt_search.getText()); 
    rs=pst.executeQuery(); 
    String add1 =rs.getString("id"); 
    txt_id.setText(add1); 
    String add2 =rs.getString("first_name"); 
    txt_firstname.setText(add2); 
    String add3 =rs.getString("surname"); 
    txt_surname.setText(add3); 
    String add4 =rs.getString("Dob"); 
    txt_dob.setText(add4); 
    String add5 =rs.getString("Email"); 
    txt_email.setText(add5); 
    String add6 =rs.getString("Telephone"); 
    txt_tel.setText(add6); 
    String add7 =rs.getString("Address"); 
    txt_address.setText(add7); 
    String add8 =rs.getString("Department"); 
    txt_dep.setText(add8); 
    String add10 =rs.getString("Salary"); 
    txt_salary.setText(add10); 
    String add11 =rs.getString("Address2"); 
    txt_add2.setText(add11); 
    String add12 =rs.getString("Apartment"); 
    txt_apt.setText(add12); 
    String add13 =rs.getString("Post_code"); 
    txt_pc.setText(add13); 
    String add14 =rs.getString("Status"); 
    txt_status.setText(add14); 
    String add15 =rs.getString("Date_hired"); 
    txt_doj.setText(add15); 
    String add16 =rs.getString("job_title"); 
    txt_job.setText(add16); 
    String add17 =rs.getString("Designation"); 
    txt_design.setText(add17); 
    byte[] image = rs.getBytes("Image"); 
    ImageIcon imageIcon = new ImageIcon(new ImageIcon(image).getImage().getScaledInstance(img.getWidth(), img.getHeight(), Image.SCALE_SMOOTH)); 
    img.setIcon(imageIcon); 
    }catch(Exception e){ 
    } finally { 
     try{ 
     rs.close(); 
     pst.close(); 
     } catch(Exception e){ 
     } } 

Répondre

2

Le curseur de l'ensemble de résultats pointe initialement vers la première ligne. vous devez déplacer le curseur sur la ligne qui contient les données dans l'objet resultset afin d'accéder aux données. Pour cela, vous pouvez utiliser rs.first() ou rs.next(). Si vous appelez rs.first(), le curseur se place sur la première ligne de cet objet ResultSet. Par contre, si vous utilisez rs.next(), le curseur est déplacé d'une ligne vers sa position actuelle. Si votre requête SQL ne renvoie qu'un seul enregistrement, vous pouvez utiliser rs.first(). appelez-le entre les lignes ci-dessous

rs=pst.executeQuery(); 
//either rs.first() or rs.next() 
String add1 =rs.getString("id"); 
1

Lorsque vous utilisez JDBC pour exécuter une requête et chercher un jeu de résultats, vous obtenez un ensemble d'enregistrements groupés dans un objet ResultSet. L'objet ResultSet n'est pas un enregistrement, mais une collection de zéro ou plusieurs enregistrements qui correspondent à vos résultats de requête SQL. Lorsque vous exécutez la méthode rs=pst.executeQuery(), vous obtenez un objet ResultSet dans la variable rs. Comme je l'ai mentionné, cet ensemble de résultats contiendra zéro, un ou même plus de résultats basés sur les données de votre base de données.

Pour récupérer le premier enregistrement, vous devez d'abord appeler la méthode rs.next() afin que le jeu de résultats pointe vers le premier enregistrement dans vos résultats de requête. Pour obtenir l'enregistrement suivant, vous devez appeler le rs.next() encore et encore jusqu'à ce que vous ayez fini d'analyser tous les enregistrements de votre jeu de résultats. Sans cela, vous ne pouvez pas récupérer les résultats de votre requête à partir de votre objet de jeu de résultats.

Dans votre code, où vous avez ces lignes,

rs=pst.executeQuery(); 
String add1 =rs.getString("id"); 

Insérer rs.next() après rs=pst.executeQuery();.

Ainsi, votre code devient ceci:

private void txt_searchKeyReleased(java.awt.event.KeyEvent evt) {          
    try{ 
     String sql ="select * from Staff_information where id=? "; 
     pst=conn.prepareStatement(sql); 
     pst.setString(1,txt_search.getText()); 
     rs=pst.executeQuery(); 
     if(rs.next()){ // You need this line 
      String add1 =rs.getString("id"); 
      txt_id.setText(add1); 
      String add2 =rs.getString("first_name"); 
      txt_firstname.setText(add2); 
      String add3 =rs.getString("surname"); 
      txt_surname.setText(add3); 
      String add4 =rs.getString("Dob"); 
      txt_dob.setText(add4); 
      String add5 =rs.getString("Email"); 
      txt_email.setText(add5); 
      String add6 =rs.getString("Telephone"); 
      txt_tel.setText(add6); 
      String add7 =rs.getString("Address"); 
      txt_address.setText(add7); 
      String add8 =rs.getString("Department"); 
      txt_dep.setText(add8); 
      String add10 =rs.getString("Salary"); 
      txt_salary.setText(add10); 
      String add11 =rs.getString("Address2"); 
      txt_add2.setText(add11); 
      String add12 =rs.getString("Apartment"); 
      txt_apt.setText(add12); 
      String add13 =rs.getString("Post_code"); 
      txt_pc.setText(add13); 
      String add14 =rs.getString("Status"); 
      txt_status.setText(add14); 
      String add15 =rs.getString("Date_hired"); 
      txt_doj.setText(add15); 
      String add16 =rs.getString("job_title"); 
      txt_job.setText(add16); 
      String add17 =rs.getString("Designation"); 
      txt_design.setText(add17); 
      byte[] image = rs.getBytes("Image"); 
      ImageIcon imageIcon = new ImageIcon(new ImageIcon(image).getImage().getScaledInstance(img.getWidth(), img.getHeight(), Image.SCALE_SMOOTH)); 
      img.setIcon(imageIcon); 
     } 
     else { 
      // Handle cases where data is not found. 
     } 
    }catch(Exception e){ 
    } finally { 
     try{ 
      rs.close(); 
      pst.close(); 
     } catch(Exception e){ 
     } 
    } 
} 

pointe Pro: Il est pas une bonne pratique d'avoir des instructions SQL écrites dans votre swing écouteurs d'événement. Essayez de déplacer ce morceau de code vers une classe différente. Vous devrez également gérer les cas où il peut y avoir plus d'un enregistrement dans votre jeu de résultats.

Voir aussi this tutorial d'Oracle pour plus de détails:

Hope this helps!

+0

Je ne comprends pas votre réponse .. –

+0

J'ai mis à jour ma réponse - voir les deux premiers paragraphes. J'espère que cela aide. – anacron

+0

Voir la 7ème ligne dans mon fragment de code qui contient 'rs.next()'. – anacron