java - 如何用JDBC调用PostgreSQL存储过程

标签 java postgresql stored-procedures 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();
    }
}

另见

关于java - 如何用JDBC调用PostgreSQL存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26110185/

相关文章:

sql - 在没有网络授权的情况下使用 Google Cloud SQL

SQL连接表及限制条件匹配结果

mysql - 为 MySQL 中查询返回的每一行调用一个存储过程

java - "Fixing"SWT 表中的前几列,以防止它们水平滚动

java - 如何使用 callablestatement 调用 'view'

java - JLabel 背景图片...奇怪的行为?

java - 无法仅执行 TestNG 测试套件中的一组

sql - Oracle 相当于 Postgres 的 DISTINCT ON?

sql - 在 SQL Server 中的另一个存储过程中执行一个存储过程

PostgreSQL 函数选择*