Java 使用另一个结果集从数据库返回值

Java 使用另一个结果集从数据库返回值,java,jdbc,prepared-statement,resultset,postgresql-9.4,Java,Jdbc,Prepared Statement,Resultset,Postgresql 9.4,如何执行此语句并用java处理它。是否有可能获得一个返回值,然后是下一个结果集,即以我的方式选择员工 我在Google上找不到准确的方法来执行我想要的操作,因为所有的示例都是单选结果,并且找不到从DB返回的查询。但根据这一点,可以像.NET那样从DB(java)管理多个结果集 我使用的是postgresql 9.4,我不想使用存储过程(函数)来完成我想做的事情 这是我一直试图测试的代码,但我得到一个例外,即“IF”行1中存在语法错误 public Employee getEmployee(Con

如何执行此语句并用java处理它。是否有可能获得一个返回值,然后是下一个结果集,即以我的方式选择员工

我在Google上找不到准确的方法来执行我想要的操作,因为所有的示例都是单选结果,并且找不到从DB返回的查询。但根据这一点,可以像.NET那样从DB(java)管理多个结果集

我使用的是postgresql 9.4,我不想使用存储过程(函数)来完成我想做的事情

这是我一直试图测试的代码,但我得到一个例外,即“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。上述代码将始终返回
员工
,即使没有



您还应该删除
。尽管Postgres驱动程序会很高兴地运行以
结尾的语句这不符合JDBC,其他驱动程序(或DBMS)可能会拒绝运行它

谢谢你的回答。我的问题就是一个例子。无论如何,我怎样才能得到后面跟着查询的返回值。我希望在一个事务/执行中执行多个查询并获得多个结果集。但同时我希望能够执行函数,但不是在DBMS中专门预编译,而是作为查询字符串。