jdbc prepareStatements для нескольких значений внутри IN - PullRequest
4 голосов
/ 01 сентября 2011

Как установить значения для sql с помощью IN , который может содержать переменные числа, такие как, ... WHERE ... status IN (4, 6,7); ?

PreparedStatement ps = con.prepareStatement(
              "SELECT ea.* FROM employeeAssignment ea "
            + "JOIN employee e ON e.employeeID = ea.employeeID "
            + "WHERE e.resourceID = ? and ea.status IN (?);");
ps.setInt(1, 75); 
ps.setInt(2, someArray/some thing other?); 

Ответы [ 4 ]

2 голосов
/ 01 сентября 2011

Вы можете сгенерировать предложение SQL IN в зависимости от того, сколько кодов состояния вам нужно передать. Поэтому, если ваш статус IN (4,6,7), вы можете сгенерировать оператор SQL, заканчивающийся тем же числом знаков вопроса, что и коды: IN (?,?,?).

1 голос
/ 01 сентября 2011

Вам необходимо привязать значение для каждой записи в массиве / списке:

SQL:

ea.status IN (?, ?, ..., ?)

Java:

ps.setInt(2, someArray[0]); 
ps.setInt(3, someArray[1]); 
..
ps.setInt([...], someArray[someArray.length]); 
0 голосов
/ 27 января 2015
0 голосов
/ 02 сентября 2011

Позвольте мне упомянуть решение о том, что AFAIK работает только в Postgres. В Postgres есть массивы, и вы можете передать в string представление '{1,2,3}'. IN может быть заменено на ANY (фактически, в некоторых ситуациях именно так PG обрабатывает запрос IN внутри, в соответствии с выводом планировщика. Массив может быть построен с циклом полностью на стороне клиента и затем передается в виде строки, вуаля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...