2013-08-03 3 views
0

Я пытаюсь подготовить лист посещаемости с помощью excel и хотел бы сохранить файл в формате .csv, а затем связать его с mysql. Как я могу создать динамическое имя таблицы через программу jdbc. Любая помощь может быть принята с благодарностью.Динамическое создание имени таблицы в программе JDBC

+2

Попробуйте это для создания таблицы с использованием JDBC http://www.mkyong.com/jdbc/jdbc-statement-example-create-a-table/ – user75ponic

+1

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

+0

@ LRA- Полностью согласен с вами. Но если это все еще необходимо, OP не должен использовать код приложения для этого. –

ответ

2

Вы должны сгенерировать SQL путем «string bashing». Например:

String tableName = ... 
    String createTableSQL = "Create table " + tableName; 
    Statement statement = connection.createStatement(createTableSQL); 
    statememt.execute(); 

и так далее.

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

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

1

Вы можете написать .sql+shell скрипт с mysql command-line-client и mysql-dataloader

скелет должен идти, как это:

  • Сформировать .csv файл с именем attendence_dd_mm_yyyy.csv с помощью приложения.
  • 'Команда оболочки': создать имя_таблицы на основе некоторой логики (например, attendence_dd_mm_yyyy).
  • 'Команда Mysql': используйте mysql -u usename -ppassword -e <Create table tablename> <fixed columns>.
  • 'Data-loader': используйте mysql -u usename -ppassword -e LOAD DATA INFILE ... для загрузки csv в только что созданную таблицу.

Я знаю, что я немного не по теме, по-прежнему предлагая этот вариант, потому что

  • данных погрузчик очень - очень быстро и легко доступны.
  • Это решит проблему загрузки данных, которая должна быть выполнена после создания таблицы.
  • Код приложения не обязательно указывать DDL permission. Проблемы могут возникнуть, если ваш код находится в infinite loop или что-то похожее.
  • Проблемы будут propagate to DB воздействовать на другие связанные приложения (если они есть).
  • Если ваш веб-приложение или аналогичный, SQL-Injection - это HUGE CONCERN для вашего подхода.

Если вы используете какую-либо другую базу данных, пожалуйста, работайте с аналогичными строками.

Смежные вопросы