Szukałem i nie byłem w stanie znaleźć odpowiedzi na następujące wyzwanie, które mam. To wydaje się dość proste, ale nie byłem w stanie go rozwiązać.Jak korzystać z listy tablic jako przygotowanego parametru instrukcji
Mam ArrayList
identyfikatorów rekordów typu Long
->ArrayList<Long>
. Chciałbym użyć tej listy identyfikatorów rekordów, aby wybrać wiersze z innej tabeli. Jak na razie dobrze. Teraz na wyzwanie ...
a) Używam przygotowanej instrukcji, aby wybrać dane z tabeli, używając ArrayList
jako danych wejściowych .
selectPS = dbConnection.prepareStatement("select columnA from tableA where id in ?");
Pytanie powyżej - jak powinien być zdefiniowany parametr? Powyższe nie wydaje się poprawne dla parametru typu i .
b) Występują również problemy przy ustawianiu wartości parametru dla przygotowanej instrukcji . Nie ma metody ustawiania wartości typu ArrayList
i nie widzę innych możliwych do zastosowania opcji .
---> selectPS.set?????(1, arraylistParameter);
ResultSet rs = selectPS.executeQuery();
Każda pomoc lub kierunek, w którym możesz mnie ustawić, jest bardzo doceniana.
Dziękuję.
** Czy możesz spróbować przekazać tablicę? **, [PreparedStatement # setArray()] (http://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html # setArray (int, java.sql.Array))? Najpierw musisz utworzyć tablicę za pomocą [Connection # createArrayOf()] (http://docs.oracle.com/javase/7/docs/api/java/sql/Connection.html#createArrayOf (java.lang.String, java.lang.Object [])). Wymienione są pewne sposoby [tutaj] (http://www.javaranch.com/journal/200510/Journal200510.jsp#a2). – NINCOMPOOP
Chciałbym dynamicznie utworzyć ciąg z '?' Dla każdego elementu w tablicy, wywołać metodę 'setLong' z każdą wartością, za każdym razem zwiększając indeks. –
@Thomas Grady CBIP Jaka jest twoja baza danych? Jeśli jest to Oracle, to nie obsługuje więcej niż 1000 rekordów w klauzuli "IN". Musisz napisać klauzulę INNER JOIN więcej informacji - http://stackoverflow.com/questions/4722220/sql-in-clause-1000- item-limit – Prabhaker