簡體   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