2014-02-18 3 views
0

Я нахожусь в своем остроумие, пытаясь проверить сложный sql-запрос. Идея состоит в том, чтобы использовать groovy для выполнения SQL-запроса, который вытащит некоторые данные из старой базы данных MS SQL и вернет его в формате, который может использовать мое приложение. Написание сценария groovy было достаточно простым, но тестирование это другое дело. В настоящее время я использую гиперзвуковой метод для создания встроенной памяти для тестирования. Когда мой тест запускается, я создаю таблицу и пытаюсь заполнить ее некоторыми тестовыми данными из XML-файла. Создание таблицы работает нормально, но вставка данных не выполняется: «пользователю не хватает привилегии или объекта, который не найден: GROUP».Состояние чувствительной к регистру столбца в HSQL

Проблема заключается в том, что hsql преобразует все мои имена столбцов в верхний регистр. Поэтому, хотя фактическое имя столбца является «Группой», оно преобразуется в «GROUP» для оператора insert. GROUP конфликтует с ключевым словом группы, поэтому запрос не выполняется.

У меня нет контроля над именем столбца в старой базе данных, поэтому мне нужно какое-то обходное решение. Есть ли способ настроить hsql для предотвращения преобразования имени столбца?

Update: Вот пример кода, который показывает, что я пытаюсь сделать в заводной:

Во-первых у меня есть метод инициализации, который создает таблицу в тестовой БД

Sql remoteDB; 
... 
remoteDB.execute(
       """create table INFO_GROUP(
"Group" varchar(2) not null primary key, 
VALUE varchar(3) null, 
GROUP_DATE datetime null, 
COMMENT varchar(25) null 
)"""); 

После создания таблицы я разбираю некоторые данные из XML-файла и вставляю его в таблицу, которую я создал:

groovy.sql.DataSet set = remoteDB.dataSet(tableName);    
Node n = it; 
Map<String,Object> m = n.attributes() ; 
assert(set!=null); 
set.add(m); 

Проблема, которую я вижу, это последняя строка, где я вызываю set.add (m). Я получаю сообщение об ошибке:

Failed to execute: insert into INFO_GROUP (Group, VALUE, GROUP_DATE, COMMENT) values (?, ?, ?, ?) because: user lacks privilege or object not found: GROUP

+0

HSQLDB сохраняет «Группу» при двойном кавычке. Оператор INSERT должен дважды указывать имя столбца «Группа», которое в этом случае не выполняется. Посмотрите, как вы можете заставить Groovy использовать правильную форму. – fredt

+0

Groovy делегирует HSQL, поэтому для изменения формы мне нужно будет найти параметр в HSQLDB, который позволяет мне контролировать чувствительность к регистру имен столбцов. Кто-нибудь знает, как это сделать? – pbuchheit

+0

Оказывается, Фредт имел правильную идею. Проблема была не в этом, это было отсутствие котировок. Как только я добавил код для переноса ключа «Group» на моей карте с двойными кавычками, проблема исчезла. Если вы опубликуете свой комментарий в качестве ответа fredt, я помечаю его как решение. Благодаря! – pbuchheit

ответ

1

HSQLDB сохраняет «Группу» при двойном кавычке. Оператор INSERT должен дважды указывать имя столбца «Группа», которое в этом случае не выполняется.

create table INFO_GROUP("Group" varchar(2) not null primary key, VALUE varchar(3) null, 
    GROUP_DATE datetime null, COMMENT varchar(25) null) 

insert into INFO_GROUP ("Group", VALUE, GROUP_DATE, COMMENT) values ? , ? , ? ,? 

Оказалось, что слово Group необходимо использовать двойные кавычки "Group" в карте в Groovy, чтобы произвести правильное утверждение INSERT.

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