【发布时间】:2016-07-17 16:53:45
【问题描述】:
我正在开发一个用户使用员工 ID 登录的登录程序,我希望系统显示登录的员工的姓名。
如何从人员 ID 中检索人员姓名?我已经尝试过,但是我一直认为 staffName 为空。
我的代码如下。前 2 个方法来自 DA 类,最后一个是 UI。
非常感谢任何帮助,在此先感谢:)
private static Staff convertToStaff(ResultSet rs) throws SQLException {
Staff staff;
int id = rs.getInt("id");
String staffID = rs.getString("staffID");
String staffName = rs.getString("staffName");
String staffPassword = rs.getString("staffPassword");
String staffNRIC = rs.getString("staffNRIC");
String staffGender = rs.getString("staffGender");
int staffContactNo = rs.getInt("staffContactNo");
String staffEmail = rs.getString("staffEmail");
String dob = rs.getString("dob");
String department = rs.getString("department");
staff = new Staff(id, staffID, staffName, staffNRIC, staffGender, staffContactNo, staffEmail, dob, department, staffPassword);
return staff;
}
public static Staff retrieveNameByStaffID(String staffID) {
ResultSet rs = null;
DBController db = new DBController();
String dbQuery;
PreparedStatement pstmt;
Staff staffName = null;
// step 1 - connect to database
db.getConnection();
// step 2 - declare the SQL statement
dbQuery = "SELECT staffName FROM staff WHERE staffID = ?";
pstmt = db.getPreparedStatement(dbQuery);
// step 3 - execute query
try {
pstmt.setString(1, staffID);
rs = pstmt.executeQuery();
if (rs.next()) { // first record found
staffName = convertToStaff(rs);
}
} catch (Exception e) {
e.printStackTrace();
}
db.terminate();
return staffName;
}
private void actionPerformedStaffLogin() {
String staffID = txtID.getText();
String staffPassword = passwordField.getText();
String adminID = txtID.getText();
String adminPassword = passwordField.getText();
Staff staffName = StaffDA.retrieveNameByStaffID(staffID);
try {
//StaffDA.logIn(staffID, staffPassword);
//StaffController.logIn(staffID, staffPassword);
if (StaffController.logIn(staffID, staffPassword) == 1) {
JOptionPane.showMessageDialog(null, "Welcome " + staffName);
System.out.println(staffName);
JPanel contentPane = new StaffMenu(HMSFrame);
HMSFrame.setContentPane(contentPane);
HMSFrame.setVisible(true);
} else if (StaffController.adminlogIn(adminID, adminPassword) == 1) {
JOptionPane.showMessageDialog(null, "Welcome " + adminID);
JPanel contentPane = new AdminMenu(HMSFrame);
HMSFrame.setContentPane(contentPane);
HMSFrame.setVisible(true);
} else if (StaffController.logIn(staffID, staffPassword) > 1) {
JOptionPane.showMessageDialog(null, "duplicate");
} else {
JOptionPane.showMessageDialog(null, "ID and Password mismatch");
}
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, ex);
}
}
【问题讨论】:
-
那么究竟是什么问题?
-
我在使用人员 ID 登录时无法检索人员姓名
-
convertToStaff正在寻找每个员工字段,而不仅仅是staffName(这是您唯一选择的)。 -
您的
SELECT语句仅返回staffName列,但您随后调用convertToStaff()尝试从一列查询结果中提取 10 列。你期望它如何工作? -
如果是这样的话,下一步的行动是什么?我尝试创建一个新的convertToStaffName,它只包含字符串staffName,构造函数我输入所有空值,0 除了staffName。然而程序返回一个空值。在这种情况下我应该怎么做?