如何在 JDBC callableStatement 中使用 INSERT....RETURNING

How can you use INSERT....RETURNING in a JDBC callableStatement

使用 Callable 语句我想 return 我的数据库中的序列类型列而不使用函数来完成它。

因此,我尝试使用以下语句作为参数传递给我的连接的 prepareCall 函数以生成 CallableStatement.

{? = INSERT INTO schema.tbl (col1, col2, col3, col5) VALUES (?, ?, ?, ?) RETURNING col6}

此处 col6 的数据类型为 serial

但这会产生异常:

org.postgresql.util.PSQLException: Malformed function or procedure escape syntax at offset 5.

我觉得这个语句使用的语法是错误的。如果是这样的话,正确的说法是什么?

注意: 我无法使用 connection.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);

注意:我也知道如何通过在 Postgresql 数据库模式中声明一个函数来完成。请不要回答此问题的解决方法。

我特别要求请回答说明如何更改语句,以便它可以与 CallableStatement

一起使用

从我收到的关于这个问题的所有评论中,都简单地指出了不能使用 INSERT .... RETURNING 语句作为 CallableStatement 的参数的方向。

它可以用作参数 PreparedStatement,使用 Statement.RETURN_GENERATED_KEYS 作为第二个参数,正如我在问题前面所述。

或者可以通过将其包装在 Postgresql 数据库架构中的存储函数中然后使用 {? = CALL <STORED FUNCTION>} 作为 CallableStatement 中的参数来使用。