搜索文本字段不返回任何值

Search text field does not returning any values

在我的员工薪资管理项目中,搜索文本字段不起作用..我使用 mysql workbench 和 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){ 
       } }

当您使用 JDBC 执行查询并获取结果集时,您会得到一组捆绑到 ResultSet 对象中的记录。 ResultSet 对象不是一条记录,而是与您的 SQL 查询结果相匹配的零个或多个记录的集合。当你执行rs=pst.executeQuery()方法时,你会在rs变量中得到一个ResultSet对象。正如我提到的,此结果集将包含零个、一个或更多基于数据库中数据的结果。

要检索第一条记录,需要先调用rs.next()方法,使结果集指向查询结果中的第一条记录。要获取下一条记录,您需要一次又一次地调用 rs.next() 直到您完成解析结果集中的所有记录。如果不这样做,您将无法从结果集对象中检索查询结果。

在你的代码中,你有这些行,

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

rs=pst.executeQuery(); 后插入 rs.next()

所以你的代码变成这样:

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语句写在你的文件中的好习惯摇摆事件监听器。尝试将这段代码移动到不同的 class。您还需要处理结果集中可能有多个记录的情况。

另请参阅来自 Oracle 的 this tutorial 了解更多详细信息:

希望对您有所帮助!

结果集的游标最初指向第一行之前。您必须将游标移动到结果集对象中包含数据的行才能访问数据。为此,您可以使用 rs.first() 或 rs.next()。如果您调用 rs.first() 它会将光标移动到此 ResultSet 对象的第一行,另一方面如果您使用 rs.next() 它会将光标从当前位置向前移动一行。如果您的 SQL 查询 returns 只有一条记录,您可以使用 rs.first()。在下面的行之间调用它

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