Наличие имени столбца в качестве входного параметра PreparedStatement

Я уже использовал поиск здесь (и на других форумах), но не нашел точного ответа на то, что я пытаюсь сделать.

Я знаю, что это можно легко сделать другим способом, и это всего лишь небольшая песочница, которую я кодирую для университетского курса ... в реальной среде я бы просто взял Spring, Hibernate и т. Д.

Итак, я написал себе небольшой общий уровень доступа к данным с POJO, работая с универсальными методами для извлечения, проверки или вставки данных в базу данных (Oracle). Большая часть этого выполняется через PreparedStatements.

Это работает, пока у меня нет объединений ... можно ли указать столбец в качестве параметра?

Пример:

Table A has Attribute X + others
Table B has Attribute Y + others

PreparedStatement с запросом SELECT * FROM A,B WHERE "A"."X" = ?

А затем введите "B". "Y" в качестве параметра ...

База данных не выдает мне ошибки или исключения, но ResultSet, возвращаемый после выполнения инструкции, пуст. Это просто невозможно сделать, или мне просто не хватает побега?

Я использую PreparedStatement.setString(int index, String value) для заполнения параметра ... из-за отсутствия идей, какой другой метод setX я мог бы использовать ...

Опять же, в реальном проекте я бы никогда не кодировал это сам, а скорее использовал бы что-то вроде Spring или Hibernate и не изобретал бы колесо заново, но я считаю это интересным упражнением - самому написать такой общий небольшой уровень доступа к данным.


person Schmiger    schedule 15.11.2013    source источник


Ответы (1)


Нет, JDBC не позволяет этого. Могут быть установлены только значения столбцов. Если вы хотите внести динамические изменения в оператор sql, вам придется сделать это до создания PreparedStatement.

person ayax79    schedule 15.11.2013
comment
Я уже ожидал, что ... У меня есть общий метод для извлечения любых данных, может быть, я просто создаю его перегруженный метод с параметром JOIN, который затем добавляется к строке ... но спасибо. - person Schmiger; 15.11.2013