簡體   English   中英

如何使用JDBC調用PostgreSQL存儲過程

[英]How to call PostgreSQL stored procedures with JDBC

我正在使用postgresql,我已經創建了一些存儲過程。 現在我想通過jdbc訪問存儲過程並處理結果。 存儲過程的結果是整數或TABLE。

我找到了以下內容:

CallableStatement upperProc = conn.prepareCall("{ ? = call upper( ? ) }");
upperProc.registerOutParameter(1, Types.VARCHAR);
upperProc.setString(2, "lowercase to uppercase");
upperProc.execute();
String upperCased = upperProc.getString(1);
upperProc.close();

有了這個,我想我可以處理單個整數返回但是如何處理TABLE返回?

您需要做的是注冊您想要使用的所有返回變量。 在提供的代碼中,您只注冊第一個輸出參數。

像這樣的東西登記前3:

String callableSQL = "{call upper(?)}";

try {
    dbConnection = getDBConnection();
    callableStatement = dbConnection.prepareCall(callableSQL);

    callableStatement.setString(1, "lowercase to uppercase");

    //register multiple output parameters to match all return values
    callableStatement.registerOutParameter(1, java.sql.Types.VARCHAR);
    callableStatement.registerOutParameter(2, java.sql.Types.VARCHAR);
    callableStatement.registerOutParameter(3, java.sql.Types.XYZ);  //any data type here

    callableStatement.execute();

    //do something with your return values
    String xyz = callableStatement.getString(1);
    //... for other items you have registered.

} catch (SQLException up) {
    throw up;  //haha!
} finally {
    //Silently close off
    if (callableStatement != null) {
        callableStatement.close();
    }

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

也可以看看

要從CallableStatement處理結果集,請將其視為返回一個或多個ResultSetStatement

ResultSet rs = tableProc.getResultSet();
// ... and loop over the result set just like normal

(如果PostgreSQL函數返回SETOF REFCURSOR則它可以返回多個結果集)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM