Предложение JdbcTemplate IN в Котлине - PullRequest
0 голосов
/ 02 ноября 2018

Как можно использовать предложение IN в Kotlin с JdbcTemplate

val days = arrayOf("TUESDAY", "WEDNESDAY")
jdbcTemplate.query("select * from days where days not in (?), mapper, days)

За следующее я получаю:

ERROR: operator does not exist: text = character varying[]

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Лучший способ обработать ситуации «IN» для шаблона JDBC (в Java или Spring) - это использовать NamedParameterJdbcTemplate из Spring. Если вы используете свойства среды для подключения источника данных, один из них уже должен быть доступен в качестве bean-компонента для автоматического подключения. Если нет, вы можете создать его, просто передав JdbcTemplate, который у вас есть.

val days = arrayOf("TUESDAY", "WEDNESDAY")
val namedParamJdbcTemplate = NamedParameterJdbcTemplate(jdbcTemplate) // or autowired in
// make sure this is not an empty collection! In your example it obviously is not empty.
// but if it is being passed in and could be empty, make sure to not query with it, 
// otherwise the JdbcTemplate will make a where clause of days NOT IN (), which will fail on execution
val paramMap: Map<String, Any?> = mapOf("days" to days) 
namedParamJdbcTemplate.query("select * from days where days not in (:days), paramMap, mapper)
0 голосов
/ 20 декабря 2018

У меня такая же проблема. Я ищу много, но не нашел "чистого" решения. Это мое решение:

@Repository
class AnyRepository (@Autowired var template: JdbcTemplate){
fun anyName(someList: Lis<int>): List<Any> = template.query("SELECT * FROM anyTable WHERE anyTable.id IN (${someList.toString().substring(1, someList.toString().length - 1)})"){ rs, _ -> ... }
}

Если я найду лучшее решение, я выложу его

...