搜索文本字段不返回任何值
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");
在我的员工薪资管理项目中,搜索文本字段不起作用..我使用 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");