繁体   English   中英

从数据库返回另一个结果集的值

[英]Return values from DB with another result set

我如何执行该语句并对其进行处理。 是否可以获取返回值,然后再获取下一个结果集,即我执行此操作时选择给员工的结果集?

我无法在Google上找到执行所需功能的准确方法,因为所有示例都是使用单个SELECT的结果,并且无法使用DB中的RETURN查找查询。 但是根据这个问题 ,可以像.NET一样从DB(java)管理多个结果集。

我正在使用PostgreSQL 9.4,但我不想使用存储的proc(函数)来完成我想做的事情。

这是我一直在尝试测试的代码,但是我得到一个例外,即“ IF”行1中存在语法错误

public Employee getEmployee(Connection con, String code) {
    Employee employee = new Employee();
    try {
        String query = 
                "IF EXISTS(SELECT * FROM employee WHERE code = ?) THEN "
                + "RETURN 1; "
                + "ELSE "
                + "RETURN 2; "
                + "END IF; "
                + "SELECT EmployeeID, FirstName FROM employee where code = ?; ";
        PreparedStatement stmt = con.prepareStatement(query);
        stmt.setString(1, code);
        stmt.setString(2, code);
        boolean hasResults = stmt.execute();
        int returnValue = 0;
        while(hasResults){
            ResultSet rs = stmt.getResultSet();
            returnValue = rs.getInt(1);
            if(returnValue == 1){
                hasResults = stmt.getMoreResults();
                while(hasResults){
                    employee.setId(rs.getInt("EmployeeID"));
                    employee.setFirstName(rs.getString("FirstName"));
                }
            }
        }
        return employee;
    } catch (Exception e) {
        System.out.println(e.getMessage());
        return null;
    }

您使事情变得过于复杂(除了SQL中没有if的事实)。

只需运行select,如果没有这样的员工,您将得到一个空结果集:

public Employee getEmployee(Connection con, String code) {
    Employee employee = new Employee();
    try {
        String query = "SELECT EmployeeID, FirstName FROM employee where code = ?";
        PreparedStatement stmt = con.prepareStatement(query);
        stmt.setString(1, code);
        ResultSet rs = stmt.executeQuery();
        if (rs.next()){
            employee.setId(rs.getInt("EmployeeID"));
            employee.setFirstName(rs.getString("FirstName"));
        }
        return employee;
    } catch (Exception e) {
        System.out.println(e.getMessage());
        return null;
    }
}

您可能还需要将Employee实例的创建移动到if (rs.next())以便如果不存在任何员工,则您的方法将返回null。 上面的代码将始终返回Employee即使没有


您还应该删除; 从查询字符串。 尽管Postgres驱动程序会很乐意运行以;结尾的语句; 这不符合JDBC,其他驱动程序(或DBMS)可能拒绝运行它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM