如何查询数据库并仅返回单行

时间:2014-07-07 22:02:26

标签: sql jsp servlets

我是编程新手,我正在尝试做简单的项目来了解更多信息。我已经完成了研究,但我似乎无法找到解决问题的方法。也许,我的程序结构不合理,但在这里:

如果已输入的员工ID已存在于数据库中,此块将有效。这是在服务器中

public boolean login(String employeeID) throws SQLException {

    String sql = "select count(*) as count from employees where emp_id=?";
    statement = connection.prepareStatement(sql);
    statement.setString(1, employeeID);

    rs = statement.executeQuery();

    if (rs.next()) {
        count = rs.getInt("count");
    }

    rs.close();

    if (count == 0) {
        return false;
    } else {
        return true;
    }

}

/* METHOD BELOW ITERATES THE FIELDS FROM MYSQL DATABASE, BUT IT DISPLAYS ALL OF IT. 
I JUST WANT TO GET A SINGLE ROW MATCHING THE EMPLOYEE ID PARAMETER ENTERED.*/

public List<EmployeeNumber> _list() throws SQLException {

    List<EmployeeNumber> result = new ArrayList<>();
    String sql = "select * from employees";
    statement = connection.prepareStatement(sql);
    rs = statement.executeQuery();

    if (rs.next()) {
        EmployeeNumber emp = new EmployeeNumber();
        emp.setEmployeeNumber(rs.getString(1));
        emp.setFirstName(rs.getString(2));
        emp.setLastName(rs.getString(3));
        emp.setEmail(rs.getString(4));
        emp.setDepartment(rs.getString(5));
        emp.setFirstApprover(rs.getString(6));
        emp.setSecondApprover(rs.getString(7));
        result.add(emp);
    }

    if (rs != null) {
        rs.close();
    }

    if (statement != null) {
        statement.close();
    }

    if (connection != null) {
        connection.close();
    }

    return result;
    }
}

我认为它与我的SQL查询语句有关,但我无法弄清楚如何修复它。

简而言之,当我从JSP页面提交员工ID时,它将验证是否存在,如果存在,我想显示该员工ID所在的同一行中的所有列字段。我怎么做?结果将显示在另一个JSP页面上。

谢谢。

2 个答案:

答案 0 :(得分:1)

您首先要计算有多少员工拥有指定的ID。然后,您从employee表中选择 all 行。

跳过第一个查询,只使用第二个查询,但通过添加where子句,就像使用第一个查询一样:

select * from employees where emp_id=?

然后在绑定参数后(就像您对第一个查询所做的那样),测试是否返回了一行:

if (rs.next()) {
    // get the data, and return an EmployeeNumber instance containing the data
}
else {
    // no employee with the given ID exists: return null
}

请注意,该方法不应返回List<EmployeeNumber>,而应返回EmployeeNumber,因为您只想从表中获得1名员工。

答案 1 :(得分:0)

也许尝试这样的事情?

String sql = "select count(*) as count from employees where emp_id=?";
statement = connection.prepareStatement(sql);
statement.setString(1, employeeID);

int count = statement.ExecuteScalar();

if (count == 0) {
    return false;
} else {
    return true;
}

}

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executescalar(v=vs.110).aspx

您还可以设置断点并逐步执行代码,并查看抛出异常的位置。这对我们有所帮助,知道异常消息以及异常消息。