PreparedStatement и oracle

программирование java sql oracle

Столкнулся с проблемой:
PreparedStatement stmt = MAIN_DB_CONNECTION.prepareStatement("select count(*) as knt from ?");
List<String> tables = new LinkedList<String>(Arrays.asList("vi_site vi_ne vi_rack vi_shelf vi_slot vi_card vi_port vi_channel vi_circuit".split(" ")));
for (String name : tables){
stmt.setString(1, name);
ResultSet res = stmt.executeQuery();
res.next();
values.add(res.getInt("knt"));
}
вылетает с java.sql.SQLException: ORA-00903: invalid table name
Если захардкодить Statement`ы, всё работает. Проблема ясно в чём: в PreparedStatement вставляется название таблицы, включая кавычки. Но вот что теперь с этим делать?

Примечание:
@alexip73 прошу прощения, я не вдавался в подробности раздачи баллов. В следующий раз не буду таким жадным)
По теме: регистр не помогает, пробовал. Кроме того, хардкод с произвольным регистром проходит.

@Masquerade вместо "?" подставляется имя из списка tables.

@Артёмка тоесть, это не решается? Этого я и боялся.
Ответы:
Если название таблицы передается в кавычках - то поиск таблицы идет с учетом регистра названия. По умолчанию при использовании create table Oracle переводит название таблицы в верхний регистр.
Т.е. в строке "vi_site vi_ne vi_rack vi_shelf"  нужно использовать названия таблиц именно в том виде(регистре), в котором они хранятся в Oracle. Т.е. скорее всего VI_SITE и т.д.
select count(*) as knt from ?
Не надо использовать имя таблицы в качестве параметра. Параметр подставляется в одинарных кавычках (апострофах), и никакой регистр тут не поможет.


16 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.