【问题标题】:Java jbdc retrieve from specific data from mysqlJava jdbc 从 mysql 中检索特定数据
【发布时间】: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。然而程序返回一个空值。在这种情况下我应该怎么做?

标签: java mysql


【解决方案1】:

你重写的代码一定是这样的

    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 * 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);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    • 1970-01-01
    • 2015-01-20
    • 1970-01-01
    • 2013-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多