我想用jdbcTemplate将一个字符串数组传递给存储过程,但是我很难这样做。这是查询:
"SELECT * from stored_procedure(?::text[])"
这就是我用jdbcTemplate调用存储过程的方法(其中notes是List):
jdbcTemplate.queryForObject(sql, Long.class, notes == null ? null : notes.toArray());
这是我得到的错误:
PreparedStatementCallback; bad SQL grammar [SELECT * from stored_procedure(?::text[])]; nested exception is org.postgresql.util.PSQLException: Can't infer the SQL type to use for an instance of [Ljava.lang.Object;. Use setObject() with an explicit Types value to specify the type to use.
我没有在网上找到解决此问题的任何内容。
答案 0 :(得分:2)
您可以使用支持命名参数绑定的NamedParameterJdbcTemplate(使用:foo
代替?
)和集合参数扩展(将:foo
扩展为?, ?, ?
)。然后你可以使用:
jdbcTemplate.queryForObject("SELECT * FROM stored_procedure({:notes})",
Collections.singletonMap("notes", notes));
我认为PostgreSQL JDBC驱动程序不支持数组参数类型(即您无法将数组绑定到单个?
)。