Проблема, возникающая при вставке данных в динамически создаваемый столбец таблицы - PullRequest
0 голосов
/ 06 марта 2009

Я динамически добавляю столбец в таблицу в БД через код, используя запрос alter table. Но я сталкиваюсь с проблемой, когда пытаюсь вставить значения в этот столбец. он выбрасывает исключение столбца не существует. И когда я очищаю и перестраиваю свой проект через netbeans, он работает нормально.

Я использую Java и MySQL в качестве базы данных.

Есть ли орган, который знает решение этой проблемы.

Ниже приведен мой код запроса таблицы изменений

     String alterTableQuery ="alter table `test` add `abc` varchar(50) NOT NULL default ''";
     stmt = conn.prepareStatement(alterTableQuery);
     boolean val = stmt.execute();

И я пытаюсь вставить данные, используя следующий код.

      String sqlQuery = "insert into `test` (`id`,`abc`) values (?)" ;
      stmt = conn.prepareStatement(sqlQuery);
      boolean val = stmt.execute();

Ответы [ 3 ]

1 голос
/ 07 марта 2009

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

0 голосов
/ 06 марта 2009

Это может быть связано с тем, что данные Описание Язык (DDL) часто выполняются вне транзакций. Возможно, фиксация / откат или даже повторное соединение решит проблему. Просто предположение.

0 голосов
/ 06 марта 2009

Я не знаю о Java, но в .net после внесения изменений в таблицу необходимо вызвать dataAdapter.AcceptChanges (); который по существу фиксирует изменение в таблице.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...