Код: Выделить всё
val srcIdLookupFuture = Future[List[List[Any]]] {
if (srcIdList.nonEmpty) { //srcIdList is like 15k items
val sql = """select my_cols
| from my_table a
| join my_other_table b
| on a.join_key = b.join_key
| where my_id_column in (?);""".stripMargin
val conn: Connection = connectionPool.getConnection
val pstmt: PreparedStatement = conn.prepareStatement(sql)
val chunks: List[List[String]] = srcIdList.sliding(1000, 1000).toList
try {
chunks.par.map(chunk => {
pstmt.setArray(1, conn.createArrayOf("VARCHAR", chunk.toArray))
val rs: ResultSet = pstmt.executeQuery()
getResults(rs)
}).flatten.toList
} finally {
pstmt.close()
conn.close()
}
} else List(List())
}
Однако я получаю эту ошибку из-за ошибки в базе данных Postgres: ОШИБКА: оператор не существует: изменение символов = изменение символов[]. Очевидно, я не передаю идентификаторы как массив правильно, когда вызываю setArray(), но судя по всему, что я просмотрел (я нашел только примеры Java), так и есть?
Другой Вопрос (извините, если это плохой тон, пожалуйста, проигнорируйте, если это так), но: Должен ли я вообще использовать подготовленные операторы для нескольких запросов с большими условиями IN? Я читал некоторые комментарии, в которых говорится, что это плохая идея с точки зрения производительности? Меня не волнует только производительность SQL-инъекций.
Подробнее здесь: https://stackoverflow.com/questions/781 ... condidtion
Мобильная версия