如何使用JdbcTemplate查询对象函数传递字符串数组查询字符串?

时间:2014-03-07 22:13:56

标签: java arrays spring parameter-passing jdbctemplate

我想用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.

我没有在网上找到解决此问题的任何内容。

1 个答案:

答案 0 :(得分:2)

您可以使用支持命名参数绑定的NamedParameterJdbcTemplate(使用:foo代替?)和集合参数扩展(将:foo扩展为?, ?, ?)。然后你可以使用:

jdbcTemplate.queryForObject("SELECT * FROM stored_procedure({:notes})", 
    Collections.singletonMap("notes", notes));

我认为PostgreSQL JDBC驱动程序不支持数组参数类型(即您无法将数组绑定到单个?)。