2013-04-29 4 views
2

Я пытаюсь выполнить запрос из файла с разделителями табуляции с помощью H2 и java. При I select * проблем нет, однако один из столбцов имеет пробел в имени столбца. Когда я пытаюсь запросить только на эту колонку я получаю исключение:выберите имя столбца из H2 с столбцами, имеющими пробелы

Caused by: org.h2.jdbc.JdbcSQLException: Column "EXAMPLE" not found; SQL statement: 

Похоже, что это не захватывая оба слова в имени столбца (пример ColumnName), но только захват первого.

Это то, что у меня есть:

System.out.println(simpleJdbcTemplate.queryForList("SELECT Example ColumnName FROM CSVREAD('" + fileName 
       + "', null,'UTF-8', chr(9)) where send = 1;", new Object[] {})); 

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

Есть ли способ запросить H2, используя столбцы с пробелами в имени?

+0

только гадать, но вы пробовали двойные кавычки или скобки? – Limey

+0

Да, я попытался включить имя столбца в: квадратные скобки, одинарные кавычки, двойные кавычки, отметки галочки все безрезультатно. – javamonkey79

ответ

4

Согласно the documentation, двойные кавычки должны делать трюк. Не забудьте правильно избежать их в Java, то есть просто хранить имя столбца в String, используйте

String exampleColumnName = "\"Example ColumnName\""; 

Кроме того, обратите внимание, он чувствителен к регистру, из документации:

Цитируемые имена случай чувствительный

+0

Уг, я пропустил чувствительную к регистру часть! Спасибо за то, что нашли документ для него, и это помогает. – javamonkey79

1

Вы также можете использовать скобки [], если вы установили «MODE = MSSQLServer» в свои свойства соединения. Пример:

SELECT * FROM [My Table] 

Строка соединения будет выглядеть примерно так:

jdbc:h2:~/test;MODE=MSSQLServer 
Смежные вопросы