Você não pode vincular uma lista a um único parâmetro em uma instrução preparada.
Gere SQL com um marcador de parâmetro para cada elemento na lista, por exemplo:
SELECT NAME FROM ITEM WHERE ID IN (?, ?, ?, ?)
Mesmo que você gere uma nova instrução para cada consulta, ainda recomendo usar um
PreparedStatement
. Se sua lista contém String
instâncias, você obterá o escape necessário para se proteger da injeção de SQL. Mas mesmo que seja um tipo seguro, como
Integer
objetos, alguns drivers ou middleware podem armazenar em cache PreparedStatements
e retornar uma instância em cache se o mesmo formulário for solicitado. Claro, alguns testes seriam necessários. Se suas listas variam muito em tamanho, você terá muitas instruções diferentes, e um cache mal implementado pode não estar preparado para lidar com tantas.