2017-02-06 75 views
1

在我的員工工資管理項目中,搜索文本字段不工作..i使用mysql工作臺和java .. 它沒有返回任何值.. 我該如何解決這個錯誤? 我的搜索文本字段如何工作????搜索文本字段沒有返回任何值

我的編碼是在這裏:

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){ 
     } } 

回答

2

結果集的光標最初指向第一行之前。您必須將光標移至包含結果集對象內的數據的行以訪問數據。爲此,您可以使用rs.first()或rs.next()。如果調用rs.first(),則將光標移動到此ResultSet對象的第一行,如果使用了rs.next(),則將光標從其當前位置移動一行。如果你的SQL查詢只返回一條記錄,你可以使用rs.first()。在下面稱之爲

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

當您使用JDBC來執行查詢並獲取結果集,你會得到一組捆綁成一個ResultSet對象記錄。 ResultSet對象不是一條記錄,而是與您的SQL查詢結果匹配的零個或多個記錄的集合。當您執行rs=pst.executeQuery()方法時,您會在rs變量中得到一個ResultSet對象。就像我所提到的,這個結果集將包含基於數據庫中數據的零,一個或更多結果。

要檢索第一條記錄,您需要先調用rs.next()方法,以便結果集指向查詢結果中的第一條記錄。要獲得下一條記錄,您需要一次又一次地調用rs.next(),直到完成解析結果集中的所有記錄。如果不這樣做,則無法從結果集對象中檢索查詢結果。

在您的代碼,那就是你有這些線,

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

插入rs.next()rs=pst.executeQuery();後。

所以,你的代碼變成這樣:

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){ 
     } 
    } 
} 

臨提示這是不是一個很好的做法,你的揮杆事件監聽器中編寫SQL語句。嘗試將這段代碼移到不同的類中。您還需要處理結果集中可能有多條記錄的情況。

也看到甲骨文this tutorial瞭解更多詳情:

希望這有助於!

+0

我dnt理解你的答案。 –

+0

我已經更新了我的答案 - 請參閱前兩段。希望能幫助到你。 – anacron

+0

請參閱我的代碼片段中包含'rs.next()'的第7行。 – anacron