在我的员工薪资管理项目中,搜索文本字段不起作用..我使用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){
} }
答案 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了解更多详情:
希望这有帮助!