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

时间:2016-02-11 09:13:42

标签: java postgresql jdbc callable-statement

使用Callable语句我想从我的数据库中返回串行类型列,而不使用函数来执行此操作。

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

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

此处col6的数据类型为serial

但这产生了一个例外:

  

org.postgresql.util.PSQLException:偏移量为5的格式错误的函数或过程转义语法。

我觉得这个语句使用的语法是错误的。如果是这样的话可能是正确的陈述吗?

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

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

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

一起使用

1 个答案:

答案 0 :(得分:0)

从我在此问题上收到的所有评论中,只需指出无法将INSERT .... RETURNING语句用作CallableStatement的参数的方向。

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

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