Передать параметр в jdbc

188
17 ноября 2017, 06:09

Такая задача: у меня есть массив типа String, содержащий коды клиентов которые я получаю методом getCodeClient.

Потом в базе oracle мне нужно получить таблицу с параметрами этих клиентов, таблица строиться на основании полученных выше кодов.

я по идее должен преобразовать массив в такой список {'code012','code876','code123', ит.д.}

как передать этот список в jdbc чтобы потом использовать в запросе?

Answer 1

по мотивам предложения из комментария:

public Client getClient(String... params){
    StringBuilder query = new StringBuilder("SELECT * FROM \"TABLE_NAME\"");
    StringJoiner join = new StringJoiner(" or ");
    for(String param : params){
      join.add(param);
    }
    String queryParams = join.toString();
    if (!queryParam.isEmpty()){
        query.append(" WHERE ");
        query.append(queryParams);
    }
    ...//дальше логика вашего запроса, а формирование запроса можно 
       //вынести в отдельный приватный метод.
}
Answer 2

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

Поясняю. PreparedStatement просьба о прекомпиляции устойчивого SQL выражения, так что при следующем вызове СУБД не будет заново компилировать SQL запрос, а будет только менять параметры вызова извлекая запрос из своего кэша, что значительно быстрее по времени + бонусом защита от SQL injection

Ближе к коду:

String selectSQL = "SELECT * FROM TABLE_NAME WHERE CODE = ?";
String whereClause="blah-blah";
PreparedStatement preparedStatement = dbConnection.prepareStatement(selectSQL);

И вот теперь уже можно формировать строку whereClause методом предложенным @Виктор через StringJoiner или StringBuilder подставляя его в PreparedStatement и вызывая собственно сам запрос (не меняя каждый раз объект PreparedStatement):

preparedStatement.setString(1, whereClause);
ResultSet rs = preparedStatement.executeQuery(selectSQL );
READ ALSO
Проверка электронной подписи в Java Bouncy Castle

Проверка электронной подписи в Java Bouncy Castle

На входе у меня 2 файла, файл p7s и файл, который был этой подписью подписанВопрос заключается в том, как можно проверить данные? Судя по всему,...

189
Корректность работы с SQLite на Java

Корректность работы с SQLite на Java

Добрый день, работаю с SQlite на java, вот у меня появился на корректность следующих строк кода

197
Как сделать чтоб при пуше менялась переменная

Как сделать чтоб при пуше менялась переменная

Такой вот вопос, у нас несколько человек работет над проектом, и в классе глобальных переменных есть такая boolean isDebugMode

185
Как записать объекты java из List в json в цикле?

Как записать объекты java из List в json в цикле?

В файле filejson сохраняется только один объект, последний

203