Подготовленный оператор SQL для создания таблицы

Я хотел узнать, как создать таблицу на лету на основе пользовательского ввода (подготовленное заявление SQL)

CREATE TABLE ? (
  First_Name char(50),
  Last_Name char(50)
)

Что поставить вместо вопросительного знака


person Mohit Bansal    schedule 07.09.2010    source источник


Ответы (2)


Заполнители PreparedStatement не предназначены для имен таблиц и имен столбцов, они предназначены только для фактических значений столбцов.

Таким образом, вам придется создать (подготовленную) строку оператора динамически, что означает, что ваше приложение будет уязвимо для SQL-инъекций. В зависимости от того, как предполагается использовать приложение и кем, это может стать БОЛЬШОЙ проблемой.

Связанный вопрос

person Pascal Thivent    schedule 07.09.2010
comment
Вот что я подумал - соглашения SQL о запрете параметризованных имен таблиц и столбцов были соблюдены в Java PreparedStatement... - person OMG Ponies; 07.09.2010
comment
@OMG Действительно, и это имеет смысл, ИМХО. - person Pascal Thivent; 07.09.2010

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

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

Почему имя таблицы имеет значение?

person sleske    schedule 07.09.2010
comment
Возможно, он реализует мастер создания таблиц для какого-то инструмента, похожего на TOAD. - person gpeche; 08.09.2010