Scala использует подготовленные операторы с условием INJAVA

Программисты JAVA общаются здесь
Ответить
Гость
 Scala использует подготовленные операторы с условием IN

Сообщение Гость »

Я пытаюсь использовать подготовленный оператор для запроса с условием IN с большим списком (тысячи) значений, например:

Код: Выделить всё

   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())

}
Обратите внимание, что мой список «идентификаторов», которые я хочу найти, очень велик, примерно. 20 тыс. Поэтому я разбиваю его на 1000 фрагментов идентификаторов.
Однако я получаю эту ошибку из-за ошибки в базе данных Postgres: ОШИБКА: оператор не существует: изменение символов = изменение символов[]. Очевидно, я не передаю идентификаторы как массив правильно, когда вызываю setArray(), но судя по всему, что я просмотрел (я нашел только примеры Java), так и есть?
Другой Вопрос (извините, если это плохой тон, пожалуйста, проигнорируйте, если это так), но: Должен ли я вообще использовать подготовленные операторы для нескольких запросов с большими условиями IN? Я читал некоторые комментарии, в которых говорится, что это плохая идея с точки зрения производительности? Меня не волнует только производительность SQL-инъекций.

Подробнее здесь: https://stackoverflow.com/questions/781 ... condidtion
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»