Postgres SELECT WHERE IN массив в Java

Я хочу выбрать все записи из базы данных, используя WHERE IN, используя значения из массива, который у меня есть. Есть ли способ передать массив в запрос? Я пробовал SELECT id FROM tag WHERE name IN "+myArray.toString()+". Но, конечно, это обречено на неудачу) Я мог бы использовать подготовленныйStatement, но количество значений всегда разное и довольно большое - 5000 или около того. Или, может быть, я должен использовать другой подход?


person Sermilion    schedule 31.07.2015    source источник
comment
Вы всегда должны использовать подготовленные операторы вместо объединения строк для создания SQL. Взгляните на MyBatis или Hibernate, если вы хотите немного больше гибкости в отношении того, что вы можете использовать в качестве входных данных.   -  person bakoyaro    schedule 31.07.2015
comment
Но я слышал, что prepareStatement намного медленнее, чем конкат строк. Это правда? (Хотя я знаю, что prepareStatement хорош против SQL-инъекций)   -  person Sermilion    schedule 01.08.2015


Ответы (1)


Если вы не хотите использовать обычную конкатенацию для этого, просто используйте StringBuilder, который НАМНОГО более эффективен, поскольку фактически создает строку только при использовании метода toString().

private String ArrayToString(String[] array)
{
    StringBuilder buffer = new StringBuilder();
    buffer.append(array[0]);

    for (int i = 1; i < array.length; i++)
    {
        buffer.append(",");
        buffer.append(array[i]);
    }

    return buffer.toString();
}
person Salomon Koen    schedule 31.07.2015