PreparedStatement не предоставляет никакого хорошего способа работы с предложением SQL IN. Per http://www.javaranch.com/journal/2005/Journal200510.jsp#a2 «Вы не можете заменить вещи, которые должны стать частью инструкции SQL. Это необходимо, потому что если сам SQL может измениться, драйвер не может предварительно скомпилировать оператор, а также имеет хороший побочный эффект предотвращения атак SQL-инъекций ». В итоге я использовал следующий подход:
String query = "SELECT my_column FROM my_table where search_column IN ($searchColumns)";
query = query.replace("$searchColumns", "'A', 'B', 'C'");
Statement stmt = connection.createStatement();
boolean hasResults = stmt.execute(query);
do {
if (hasResults)
return stmt.getResultSet();
hasResults = stmt.getMoreResults();
} while (hasResults || stmt.getUpdateCount() != -1);