【问题标题】:Search text field does not returning any values搜索文本字段不返回任何值
【发布时间】:2017-02-06 11:07:53
【问题描述】:

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

【问题讨论】:

    标签: java mysql netbeans-8


    【解决方案1】:

    结果集的光标最初指向第一行之前。您必须将光标移动到包含结果集对象中数据的行才能访问数据。为此,您可以使用 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"); 
    

    【讨论】:

      【解决方案2】:

      当您使用 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){ 
              }
          }
      }
      

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

      有关更多详细信息,另请参阅 Oracle 的 this tutorial

      希望这会有所帮助!

      【讨论】:

      • 我已经更新了我的答案 - 请参阅前两段。希望对您有所帮助。
      • 查看我的代码 sn-p 中包含 rs.next() 的第 7 行。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-16
      • 1970-01-01
      • 2018-09-01
      • 1970-01-01
      • 2020-05-20
      • 1970-01-01
      相关资源
      最近更新 更多