2016-07-05 2 views
0

Попытка выполнить создать таблицу запроса, который имеет имя столбца с "в нем. Кажется, это ошибки вне каждый раз, хотя строка запроса создана отлично работает на MYSQL браузере.не удалось создать MySQL таблицу, используя спящий режим

SYSOUT в createStmt дает:

Create table `myschema`.`flatTest_data_tbl`(`NAME` longtext,`TASK` longtext,`LO&"CATION` longtext) CHARACTER SET utf8 

SQLQuery createQuery = session.createSQLQuery(createStmt); 
     createQuery.executeUpdate(); 
     session.close(); 

It ошибки на executeUpdate:

java.util.NoSuchElementException 
    at java.util.StringTokenizer.nextToken(StringTokenizer.java:349) 
    at org.hibernate.engine.jdbc.internal.BasicFormatterImpl$FormatProcess.perform(BasicFormatterImpl.java:142) 
    at org.hibernate.engine.jdbc.internal.BasicFormatterImpl.format(BasicFormatterImpl.java:91) 
    at org.hibernate.engine.jdbc.spi.SqlStatementLogger.logStatement(SqlStatementLogger.java:101) 
    at org.hibernate.engine.jdbc.spi.SqlStatementLogger.logStatement(SqlStatementLogger.java:95) 
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:180) 
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareStatement(StatementPreparerImpl.java:91) 
    at org.hibernate.engine.query.spi.NativeSQLQueryPlan.performExecuteUpdate(NativeSQLQueryPlan.java:196) 
    at org.hibernate.internal.SessionImpl.executeNativeUpdate(SessionImpl.java:1313) 
    at org.hibernate.internal.SQLQueryImpl.executeUpdate(SQLQueryImpl.java:401) 
+0

Колонна с кавычками в нем? Ты уверен? И если вы уверены: вы действительно уверены? Наконец: почему ??? –

+0

есть требование, чтобы мы выбирали заголовки столбцов из плоских файлов и конвертировали их в таблицы mysql, поэтому плоские файлы могут иметь двойные кавычки в своих заголовках, дайте мне знать, если у вас есть решение для этого :) – user2176576

+2

Я думаю, что вы принимаете спецификации немного слишком буквально. Если вы серьезно относитесь к своей работе, то мой совет - не делать этого. –

ответ

0

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

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

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

Однако для того, чтобы найти решение, что по этому поводу:

Создайте вторую таблицу со следующими столбцами

s_label:VARCHAR(1024), 
t_value:LONGTEXT 

и добавить внешний ключ к этой таблице из исходной таблицы. Имя столбца из файла переходит в s_label, и вы можете заполнить его любыми символами, которые вам нравятся.

Это может быть немного накладными расходами для объединения таблиц, но гораздо более важно: это чистый :)

+0

спасибо матовый, backtick сделал трюк для меня. Включение имени столбца - это обратная ссылка, дает нам возможность использовать ключевые слова как имена столбцов, а также – user2176576

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