Вставка нескольких разделенных запятыми целых чисел, использующих JDBC в предложении IN в SQL [duplicate]

Другим сценарием является то, что вы нанесли нулевой объект в тип значения . Например, код ниже:

object o = null;
DateTime d = (DateTime)o;

Он выкинет NullReferenceException в роли. В приведенном выше примере это кажется совершенно очевидным, но это может произойти в более «поздних связующих» сложных сценариях, где нулевой объект был возвращен из некоторого кода, которого вы не являетесь, и приведение, например, генерируется некоторой автоматической системой.

Одним из примеров этого является этот простой фрагмент привязки ASP.NET с элементом управления календарем:

" />

Здесь SelectedDate на самом деле является свойством - типа DateTime - типа Calendar Web Control, и привязка может отлично вернуть что-то null. Неявный генератор ASP.NET создаст кусок кода, который будет эквивалентен приведенному выше методу. И это поднимет NullReferenceException, что довольно сложно определить, потому что он лежит в сгенерированном ASP.NET коде, который компилирует отлично ...

4
задан stepancheg 16 September 2010 в 06:01
поделиться

3 ответа

Существуют конкретные способы реализации этого поставщика, поэтому было бы хорошо знать, какую базу данных вы используете. Я знаю решения для PostgreSQL и H2. Я реализовал эту функцию в базе данных H2, так что это то, что я знаю лучше всего:

H2 Database

PreparedStatement prep = conn.prepareStatement(
  "select * from users where login in (select * from table(x int = ?))");
prep.setObject(1, new Object[] { "1", "2" });
ResultSet rs = prep.executeQuery();

PostgreSQL

WHERE login = ANY(?)

Затем установите параметр к массиву значений с использованием PreparedStatement.setArray (..) (not setObject как для H2).

4
ответ дан Thomas Mueller 25 August 2018 в 22:32
поделиться
//---

String query = "SELECT * FROM users WHERE login = ?";    

List<Login> list = new ArrayList<Login>();      
Login login = null;

for(String param : conditions){

    pStmt.setString(1,param);

    rSet = pStmt.executeQuery();    

            if(rSet.next()){

                login = new Login();
                login.setName(rSet.getString(1));

                list.add(login);
            }
}

return list;

//---

условия будут списком элемента, на основе которого вы хотите получить поля.

0
ответ дан Nayan Wadekar 25 August 2018 в 22:32
поделиться

Посмотрите здесь для обзора доступных опций. Насколько я могу вам сказать, каждый динамически генерирует необходимое количество символов-заполнителей (с некоторыми оптимизациями).

В PreparedStatement существует метод setArray, но иногда его использование не представляется возможным. Вы можете попробовать попробовать.

Если параметр Spring JDBCTemplate Spring является опцией, вы можете использовать автоматическое расширение коллекции, как описано здесь .

3
ответ дан viaclectic 25 August 2018 в 22:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: