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

时间:2017-02-06 11:07:53

标签: java mysql netbeans-8

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

2 个答案:

答案 0 :(得分: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 :(得分:1)

使用JDBC执行查询并获取结果集时,会得到一组绑定到ResultSet对象的记录。 ResultSet对象不是一个记录,而是与您的SQL查询结果匹配的零个或多个记录的集合。执行rs=pst.executeQuery()方法时,ResultSet变量中会出现rs个对象。就像我提到的,这个结果集将包含基于数据库中数据的零,一个甚至更多结果。

要检索第一条记录,您需要先调用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){ 
        }
    }
}

专业提示 是在Swing事件监听器中编写SQL语句的好习惯。尝试将这段代码移动到另一个类。您还需要处理结果集中可能有多个记录的情况。

另请参阅Oracle的this tutorial了解更多详情:

希望这有帮助!